ASP.net Gridview not sorting

本文关键字:sorting not Gridview net ASP | 更新日期: 2023-09-27 18:17:48

我有一个gridview,我想排序。我已经阅读了一些教程,并直接从MSDN页面复制了我的大部分代码,但我无法让它工作。它可以编译,但是当我单击网格列标题时什么也没有发生。

我的HTML:

<asp:DataGrid runat="server" id="dgrMainGrid" CssClass="c_mainGrid" 
AutoGenerateColumns="true" AllowSorting="true" 
OnSorting="TaskGridView_Sorting" />

我的后台代码:

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页面复制的,我一直在看它,直到我变成代码盲。有人能看出我的错误吗?谢谢。

ASP.net Gridview not sorting

您使用的是DataGrid,而不是GridView。根据微软的说法,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不工作,因为它应该。