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

    Non riesco a capire come ordinare il mio gridview con entrambi i campi personalizzati Databound E .Ordinamento griglia con campi modello personalizzati

    Il campo personalizzato simile al seguente:

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

    Essa richiede una funzione che mostra il numero di articoli della categoria data ha.

    L'ordinamento per i campi associati al codice funziona perfettamente ma non i campi personalizzati. Im anche alla ricerca di un metodo generico che funzioni per tutte le mie gridview.

    Qualcuno può aiutarmi nella direzione giusta per favore? Di seguito è riportato il mio codice CustomGrid completo.

    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

    Puoi mostrare un codice aspx di questo gridview? –

    risposta

    4

    Assicurarsi di specificare la proprietà SortExpression sul campo modello

    <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

    Ho avuto lo stesso problema, il BoundField stato di ordinamento come dovrebbe, ma il TemplateField no sorta affatto.

    ho cambiato questo:

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

    A tal:

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

    ho rimosso il HeaderTemplate e ha aggiunto il HeaderText nel TemplateField.

     Problemi correlati

    • Nessun problema correlato^_^