ASP.net Gridview没有排序

时间:2016-11-14 19:59:46

标签: c# asp.net sorting gridview

我有一个我想要排序的网格视图。我已经阅读了一些教程并直接从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页面复制过来的,我一直在使用它,直到我进行代码盲。有人能看出我的错误吗?感谢。

1 个答案:

答案 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