2013-04-16 4 views
1

Я хотел бы отсортировать мой GridView, щелкнув заголовок столбца. До сих пор я объявил SPDataSourceСортировка asp.net GridView с SPDataSource

<SharePoint:SPDataSource 
       runat="server" 
       ID="SPdsInventarGrid" 
       DataSourceMode="List" 
       UseInternalName="true" 
       Scope="Recursive" 
       SelectCommand="<View><Query><Where><Or><Neq><FieldRef Name='EBS_x002e_CN_x002e_Inventar_x00210' /><Value Type='Text'>Open</Value></Neq><IsNull><FieldRef Name='EBS_x002e_CN_x002e_Inventar_x0028' /></IsNull></Or></Where></Query><ViewFields><FieldRef Name='Title'/><FieldRef Name='ID'/><FieldRef Name='EBS_x002e_CN_x002e_Inventar_x0028'/><FieldRef Name='EBS_x002e_CN_x002e_Inventar_x00210'/><FieldRef </ViewFields></View>"> 
       <SelectParameters> 
        <asp:Parameter Name="ListName" DefaultValue="Inventar" /> 
       </SelectParameters> 
      </SharePoint:SPDataSource> 

Затем я создал свою сетку, на основе источника данных

<asp:GridView Visible="true" Width="100%" 
       ID="gvInventar" 
       AutoGenerateColumns="false" runat="server" CellPadding="2" AllowPaging="false" AllowSorting="true" OnSorted="gvInventar_Sorted" OnSorting="gvInventar_Sorting" GridLines="None" DataSourceID="SPdsInventarGrid" OnRowCommand="gvInventar_RowCommand"> 
       <Columns> 
        <asp:CommandField ButtonType="Image" ShowEditButton="true" EditImageUrl="/_layouts/images/edit.gif" UpdateImageUrl="/_layouts/images/save.gif" CancelImageUrl="/_layouts/images/delete.gif" /> 

        <asp:TemplateField HeaderText="ID"> 
         <ItemTemplate> 
          <asp:Label Text='<%# Bind("ID") %>' runat="server" ID="lblIdProduct"></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Title" > 
         <ItemTemplate> 
          <asp:Label Text='<%# Bind("Title") %>' runat="server" ID="lblTitleProduct" ></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Product" SortExpression="Product"> 
         <ItemTemplate> 
          <asp:Label Text='<%# Bind("EBS_x002e_CN_x002e_Inventar_x0028") %>' runat="server" ID="lblProduct" "></asp:Label> 
         </ItemTemplate> 

       </Columns> 
    </asp:GridView> 

Теперь у меня есть эта функция, где я хотел бы получить текущий запрос в виде строки и добавить <OrderBy> (мое поле) перед <Query>, но я получаю сообщение об ошибке сказав, что DataSource уже объявлен (что верно, потому что я хочу быть объявлен в осины)

protected void gvInventar_Sorting(object sender, GridViewSortEventArgs e) 
    { 
     SPQuery q = new SPQuery(); 
     q.Query = SPdsInventarGrid.SelectCommand; 
     switch (e.SortExpression) 
     { 
      case "Product": 
       if (e.SortDirection == SortDirection.Ascending) 
       { 
        gvInventar.DataSource = q.Query; 
        gvInventar.DataBind(); 
       } 
       else 
       { 
       } 
       break; 
     } 
    } 

Несмотря на то, что он не работает таким образом, я не думаю, что изменение запроса - это решение. Может ли кто-нибудь помочь мне в этом вопросе?

ответ

0

Вам не нужно писать собственный код для сортировки GridView, нажав на заголовки столбцов, все, что вам нужно сделать, это установить SortExpression свойство TemplateField в требуемое имя столбца, например:

<Columns> 
    <asp:TemplateField HeaderText="ID" SortExpression="ID"> 
     <ItemTemplate> 
      <asp:Label Text='<%# Bind("ID") %>' runat="server" ID="lblIdProduct" /> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="Title" SortExpression="Title"> 
     <ItemTemplate> 
      <asp:Label Text='<%# Bind("Title") %>' runat="server" ID="lblTitleProduct" /> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="Product" SortExpression="EBS_x002e_CN_x002e_Inventar_x0028"> 
     <ItemTemplate> 
      <asp:Label Text='<%# Bind("EBS_x002e_CN_x002e_Inventar_x0028") %>' runat="server" 
       ID="lblProduct" /> 
     </ItemTemplate> 
    </asp:TemplateField> 
</Columns> 

Теперь вы можете сортировать все 3 колонки:

enter image description here

+0

я не могу поверить, что это было так просто :) Спасибо большое! – Fulga