我的麻烦是我不知道如何传递事件来对我的DataTable进行排序。 我列出了.aspx页面,以及BindThrottles函数后面.cs文件的流程。我正在寻找一个使用DataTable的简单解决方案。我看到其他代码看起来很简单,使用了我最后发布的事件,但不知道如何使用该表单。
我的.aspx页面配置为..
<asp:ObjectDataSource ID="GridObjectDataSource"
runat="server" SelectMethod="BindThrottles"
TypeName="WebsiteNamespace.ThrottleInterval"
SortParameterName="SortBy">
<SelectParameters>
<asp:ControlParameter ControlID="gvThrottles"
Name="sortDirection" PropertyName="SortDirection" />
</SelectParameters>
</asp:ObjectDataSource>
<asp:GridView ID="gvThrottles" AllowSorting="True" runat="server"
DataKeyNames="UserID" DataSourceID="GridObjectDataSource"
>
<Columns>
<asp:TemplateField HeaderText="USERID" SortExpression="USERID">
<ItemTemplate>
<asp:Label ID="lblItemUserId" runat="server"
Text='<%# Eval("USERID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Requests" SortExpression="REQUESTS">
<ItemTemplate>
<asp:Label ID="lblItemNumRequests" runat="server"
Text='<%# Eval("REQUESTS") %>'></asp:Label>
</ItemTemplate>
</Columns>
</asp:GridView>
我的BindThrottles方法已配置......
public DataTable BindThrottles(string SortBy, int sortDirection){
//..code to run queries from MongoDB
//..code to create columns and rows of DataTable
//..code to fill the rows with the data from the MongoDB
*************************************************************
//.. I need some code here to let my DataTable sort on
//.. the column header link for Asc or Desc.
*************************************************************
}
我看到另一个显示代码的stackoverflow帖子......
dt.DefaultView.Sort = e.SortExpression + " " +
GetSortDirection(e.SortExpression);
并将GetSortDirection配置为
public string GetSortDirection(string column)
{
// By default, set the sort direction to ascending.
string sortDirection = "ASC";
// Retrieve the last column that was sorted.
string sortExpression = ViewState["SortExpression"] as string;
if (sortExpression != null)
{
// Check if the same column is being sorted.
// Otherwise, the default value can be returned.
if (sortExpression == column)
{
string lastDirection = ViewState["SortDirection"] as string;
if ((lastDirection != null) && (lastDirection == "ASC"))
{
sortDirection = "DESC";
}
}
}
// Save new values in ViewState.
ViewState["SortDirection"] = sortDirection;
ViewState["SortExpression"] = column;
return sortDirection;
}
但是我不知道如何将它变成一种形式,可以使用事件在已经设置了非事件参数的函数内进行排序,或者是否有更好的方法对ASC和DESC进行排序通过列标题链接。
其他信息: 我是ASP的新手。我继承了这个项目,这就是为什么这个函数目前仍然被称为BindThrottles,甚至认为我试图消除绑定(同事的建议)。
答案 0 :(得分:0)
在此函数中,SortExpression是列名,SortDirection是排序顺序,即(升序或降序)。由于这两个值都存储在ViewState中,因此您可以在任何事件中使用它。您可以像这样使用此函数:
DataView dv = new DataView(dtTable);
dv.Sort = columnName + " " + GetSortDirection(columnName);
GridView1.DataSource = dv;
dtTable = dv.ToTable();
GridView1.DataBind();
其中dtTable是DataTable