2013-04-16 99 views
1

我想通過單擊列標題對GridView進行排序。到目前爲止,我宣佈一個SPDataSource使用SPDataSource對asp.net GridView進行排序

<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>之前(我的字段),但我得到一個錯誤,指出該數據源已被宣佈(這是真的,因爲我想在ASP中聲明)

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排序,所有你需要做的就是設置TemplateField到所需的列名的SortExpression屬性,如:

<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

相關問題