我有一个我想要排序的网格视图。我已经阅读了一些教程并直接从MSDN页面复制了我的大部分代码,但我无法让它工作。它会编译,但是当我单击网格列标题时没有任何反应。
我的HTML:
<asp:DataGrid runat="server" id="dgrMainGrid" CssClass="c_mainGrid"
AutoGenerateColumns="true" AllowSorting="true"
OnSorting="TaskGridView_Sorting" />
我的Codebehind:
protected void TaskGridView_Sorting(object sender, GridViewSortEventArgs e)
{
//Retrieve the table from the session object.
DataTable dt = Session["Grid"] as DataTable;
if (dt != null)
{
dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
dgrMainGrid.DataSource = dt;
dgrMainGrid.DataBind();
}
}
private 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";
}
}
}
return sortDirection;
}
我知道我的会话变量中的数据表有效,因为它是页面加载时网格的来源,工作正常。另一件事,如果它很重要,那么gridview将驻留在更新面板中。
正如我所说,大部分内容都是从MSDN页面复制过来的,我一直在使用它,直到我进行代码盲。有人能看出我的错误吗?感谢。
答案 0 :(得分:1)
您使用的是DataGrid
,而不是GridView
。根据{{3}},DataGrid没有OnSorting
个事件,而是OnSortCommand
。使用它或切换到GridView(推荐)
<asp:DataGrid runat="server" OnSortCommand="dgrMainGrid_SortCommand" id="dgrMainGrid" CssClass="c_mainGrid" AutoGenerateColumns="true" AllowSorting="true" />
在代码背后
protected void dgrMainGrid_SortCommand(object source, DataGridSortCommandEventArgs e)
{
DataTable dt = Session["Grid"] as DataTable;
if (dt != null)
{
dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
dgrMainGrid.DataSource = dt;
dgrMainGrid.DataBind();
}
}
而你的GetSortDirection
无法正常工作。请参阅Microsoft。