2009-10-20 25 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