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

    मुझे लगता है कि मेरे ग्रिडव्यू को दोनों डेटाबेस और कस्टम फ़ील्ड के साथ सॉर्ट करना है।कस्टम टेम्पलेट फ़ील्ड्स के साथ ग्रिडव्यू सॉर्टिंग

    कस्टम फ़ील्ड इस तरह दिखेगा:

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

    यह एक समारोह से पता चलता है जो कि कितने आइटम दिया श्रेणी है के लिए कहता है।

    डाटाबेस वाले क्षेत्रों के लिए सॉर्टिंग perfec काम करते हैं लेकिन कस्टमफील्ड नहीं। आईएम भी एक सामान्य विधि की तलाश में है जो मेरे सभी ग्रिडव्यू के लिए काम करता है।

    क्या कोई मुझे सही दिशा में मदद कर सकता है? नीचे मेरा पूरा कस्टम कोड है।

    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

    क्या आप इस ग्रिडव्यू के एएसपीएक्स कोड को दिखा सकते हैं? –

    उत्तर

    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 गयी।

    संबंधित मुद्दे