2009-10-20 24 views
9

我似乎無法弄清楚如何排序我的gridview與數據綁定和 自定義字段。Gridview排序與自定義模板字段

自定義字段是這樣的:

<asp:Label ID="lblItems" runat="server" Text='<%# GetItems((int)DataBinder.Eval(Container.DataItem, "ObjectCategoryID"))%>' /> 

它呼籲,它展示了特定類別的多少項目具有的功能。

數據綁定字段的排序工作完善,但不是自定義字段。 Im 也在尋找一種適用於我所有Gridviews的通用方法。

有人可以幫助我在正確的方向嗎?以下是我的完整customgrid代碼。

using System; 
using System.Data; 
using System.Configuration; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 

using System.Xml.Linq; 
using System.Collections; 

namespace CustomControls 
{ 
    public class CustomGrid : GridView 
    { 
     public CustomGrid() 
     { 
       PageIndexChanging += CustomGrid_PageIndexChanging; 
     }   

    private string ConvertSortDirectionToSql(SortDirection sortDirection) 
    { 
     string newSortDirection = String.Empty; 

     switch (sortDirection) 
     { 
      case SortDirection.Ascending: 
       newSortDirection = "ASC"; 
       break; 

      case SortDirection.Descending: 
       newSortDirection = "DESC"; 
       break; 
     } 

     return newSortDirection; 
    } 

    protected void CustomGrid_PageIndexChanging(object sender, GridViewPageEventArgs e) 
    { 
     this.PageIndex = e.NewPageIndex; 
     this.DataBind(); 
    } 

    protected override void OnSorting(GridViewSortEventArgs e) 
    { 
     DataSet ds = (DataSet)System.Web.HttpContext.Current.Session["Source"]; 
     DataTable dataTable = ds.Tables[0]; 

     if (dataTable != null) 
     { 
      DataView dataView = new DataView(dataTable); 


      if ((string)System.Web.HttpContext.Current.Session["Direction"] == "Asc") 
      { 
       dataView.Sort = e.SortExpression + " " + "ASC"; 
       System.Web.HttpContext.Current.Session["Direction"] = "Desc"; 
      } 

      else if ((string)System.Web.HttpContext.Current.Session["Direction"] == "Desc") 
      { 
       dataView.Sort = e.SortExpression + " " + "DESC"; 
       System.Web.HttpContext.Current.Session["Direction"] = "Asc"; 
      } 

      else 
      { 
       dataView.Sort = e.SortExpression + " " + "ASC"; 
       System.Web.HttpContext.Current.Session["Direction"] = "Desc"; 
      } 

      this.DataSource = dataView; 
      this.DataBind(); 
     } 
    } 

    protected override void OnInit(System.EventArgs e) 
    { 
     this.AllowSorting = true; 
     this.AllowPaging = true; 
     this.PagerSettings.Mode = PagerButtons.NumericFirstLast; 
     this.AutoGenerateColumns = false; 
     this.CssClass = "gv"; 
     this.RowStyle.CssClass = "gvRow"; 
     this.AlternatingRowStyle.CssClass = "gvAlternateRow"; 
     this.HeaderStyle.CssClass = "gvHeader"; 
     this.GridLines = GridLines.None; 
     this.PagerStyle.CssClass = "gvPager"; 
     this.EmptyDataText = "<div style=\"width:100%;text-align:left;\">No data found</div>"; 
    } 
} 
+0

你可以顯示這個gridview的aspx代碼嗎? –

回答

4

確保指定的模板字段

<asp:TemplateField HeaderText="Object Category ID" SortExpression="ObjectCategoryID"> 
<ItemTemplate> 
    <asp:Label ID="lblItems" runat="server" Text='<%# GetItems((int)DataBinder.Eval(Container.DataItem, "ObjectCategoryID"))%>' /> 
</ItemTemplate> 
</asp:TemplateField> 
14

我有同樣的問題SortExpression屬性,則BoundField被排序,因爲它應該,但TemplateField沒有排序的。

我改變了這個:

<asp:TemplateField SortExpression="Category"> 
    <HeaderTemplate>Category</HeaderTemplate> 
    <ItemTemplate>A value</ItemTemplate> 
</asp:TemplateField> 

要這樣:

<asp:TemplateField HeaderText="Category" SortExpression="Category"> 
    <ItemTemplate>A value</ItemTemplate> 
</asp:TemplateField> 

我刪除了HeaderTemplate並在TemplateField添加HeaderText