【发布时间】:2014-07-03 15:23:12
【问题描述】:
我正在构建一个小型 web 应用程序来跟踪赢/输/平均。数据被保存在一个 XML 文件中(因为它只有几行)。我想尝试让页面的访问者能够按可能的每一列(播放、获胜、平均)进行排序。我可以让它对 Played 和 Won 进行排序,但不是 Average,因为 Average 是一个计算值。
如何获得它对 GetWinAverage 函数的结果进行排序?
这是它目前的样子:
<asp:GridView ID="Results" runat="server" AutoGenerateColumns="false" AllowSorting="true" OnSorting="gvResults_Sorting" EnableViewState="true">
<Columns>
<asp:TemplateField HeaderText="Played" SortExpression="Played">
<ItemTemplate>
<asp:Label ID="lblPlayed" runat="server" Text='<%# Eval("Played") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<Columns>
<asp:TemplateField HeaderText="Won" SortExpression="Won">
<ItemTemplate>
<asp:Label ID="lblWon" runat="server" Text='<%# Eval("Won") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<Columns>
<asp:TemplateField HeaderText="Average" SortExpression="Average">
<ItemTemplate>
<asp:Label ID="lblAverage" runat="server" Text='<%# GetWinAverage(Eval("Won"), Eval("Played")) %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
GetWinAverage 如下所示:
public string GetWinAverage(object gamesWon, object gamesPlayed)
{
string strReturn = "";
double iWon = Convert.ToDouble(gamesWon);
double iPlayed = Convert.ToDouble(gamesPlayed);
if (iPlayed < 0)
{
return "0%";
}
else
{
double dReturn = (iWon / iPlayed) * 100;
strReturn = string.Format("{0:N2}%", dReturn);
return strReturn;
}
}
排序看起来像这样:
private const string ASCENDING = " ASC";
private const string DESCENDING = " DESC";
public SortDirection GridViewSortDirection
{
get
{
if (ViewState["sortDirection"] == null)
ViewState["sortDirection"] = SortDirection.Ascending;
return (SortDirection)ViewState["sortDirection"];
}
set { ViewState["sortDirection"] = value; }
}
protected void gvResults_Sorting(object sender, GridViewSortEventArgs e)
{
string sortExpression = e.SortExpression;
if (GridViewSortDirection == SortDirection.Ascending)
{
GridViewSortDirection = SortDirection.Descending;
SortGridView(sortExpression, DESCENDING);
}
else
{
GridViewSortDirection = SortDirection.Ascending;
SortGridView(sortExpression, ASCENDING);
}
}
private void SortGridView(string sortExpression, string direction)
{
// You can cache the DataTable for improving performance
DataTable dt = dtPlayers;
DataView dv = new DataView(dt);
dv.Sort = sortExpression + direction;
gvResults.DataSource = dv;
gvResults.DataBind();
}
【问题讨论】:
标签: c# asp.net sorting gridview