Gridview tri personnalisé pour le modèle de champs
Je n'arrive pas à comprendre comment faire le tri dans mes gridview avec à la fois lié aux données ET
champs personnalisés.
Le champ personnalisé ressembler à ceci:
<asp:Label ID="lblItems" runat="server" Text='<%# GetItems((int)DataBinder.Eval(Container.DataItem, "ObjectCategoryID"))%>' />
Il appelle une fonction qui montre le nombre d'élément de la catégorie a.
Le tri pour la databounded champs de travail perfec mais pas le customfields. Im
aussi la recherche d'une méthode générique qui fonctionne pour tous mes gridviews.
Quelqu'un peut m'aider dans la bonne direction s'il vous plaît? Ci-dessous mon plein customgrid code.
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>";
}
}
Pouvez-vous me montrer un code aspx de cette gridview?
OriginalL'auteur Mark | 2009-10-20
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème, le
BoundField
était de tri comme il se doit, mais leTemplateField
n'a pas de tri à tous.J'ai changé cela:
:
J'ai enlevé le
HeaderTemplate
et ajouté leHeaderText
dans leTemplateField
.OriginalL'auteur Martin
Assurez-vous de spécifier le SortExpression de propriété sur le champ modèle
OriginalL'auteur CRice