c#
  • asp.net
  • gridview
  • sorting
  • templatefield
  • 2009-10-20 4277 views 9 likes 
    9

    Tôi dường như không thể tìm ra cách sắp xếp GridView của mình với cả trường dữ liệu và tùy chỉnh.Phân loại GridView với các trường mẫu tùy chỉnh

    Các lĩnh vực tùy chỉnh giống như thế này:

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

    Nó đòi hỏi một chức năng trong đó cho thấy có bao nhiêu mục các thể loại nhất định có.

    Việc sắp xếp cho các trường dữ liệu hoạt động tốt nhưng không phải là trường tùy chỉnh. Im cũng đang tìm kiếm một phương pháp chung phù hợp với tất cả các lần xem lưới của tôi.

    Ai đó có thể giúp tôi đi đúng hướng không? Dưới đây là mã tùy chỉnh đầy đủ của tôi.

    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

    Bạn có thể hiển thị mã aspx của chế độ xem lưới này không? –

    Trả lời

    4

    Hãy chắc chắn rằng bạn chỉ định tài sản SortExpression trên trường mẫu

    <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

    tôi đã cùng một vấn đề, các BoundField được sắp xếp như mong muốn, nhưng TemplateField không loại ở tất cả.

    tôi đã thay đổi này:

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

    Để này:

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

    tôi loại bỏ các HeaderTemplate và thêm HeaderText trong TemplateField.

    Các vấn đề liên quan