在asp.net页面中,gridview无法进行排序

本文关键字:排序 gridview net asp | 更新日期: 2023-09-27 18:27:05

我在asp.net页面上使用了一个网格视图。并编写排序代码,但问题是排序不起作用。你能告诉我我做错了什么吗。

绑定网格视图的代码

DataSet _ds = _fOrderWrapper.ExecuteDataSet();
   ViewState["FOrders"] = _rows;
   lblFinalisedCount.Text = _ds.Tables[0].Rows.Count.ToString();
   GridOpen.DataSource = _ds.Tables[0];
   ViewState["dt"] = _ds.Tables[0];
   ViewState["sort"] = "ASC";
    GridOpen.DataBind();
    UpdatePanel1.Update();

分拣事件代码:

try
    {
        DataTable dt1 = (DataTable)ViewState["dt"];
        if (dt1.Rows.Count > 0)
        {
            if (Convert.ToString(ViewState["sort"]) == "ASC")
            {
                dt1.DefaultView.Sort = e.SortExpression +" " + "DESC";
                ViewState["sort"] = "Desc";
            }
            else
            {
                dt1.DefaultView.Sort = e.SortExpression +" "+ "ASC";
                ViewState["sort"] = "ASC";
            }
            GridOpen.DataSource = dt1;
            GridOpen.DataBind();
            UpdatePanel1.Update();
        }
    }
    catch (Exception ex)
    {
    }

在asp.net页面中,gridview无法进行排序

您的代码可能会先执行排序事件代码,然后再执行常规数据绑定代码。第二数据绑定消除了第一数据绑定的效果。尝试在每个位置放置断点。当ASP.NET处理更新面板的请求时,它会运行整个页面生命周期,而不仅仅是触发更新的事件的事件处理程序。

进一步审查后编辑:

你的代码是这样做的:

dt1.DefaultView.Sort = ...

它更改与DataTable关联的默认DataView的排序。

但随后它将gridview的数据源设置为DataTable本身。

GridOpen.DataSource = dt1;

我相信默认DataView没有用于数据绑定。(我做这件事已经有一段时间了,我可能还是错了)。

我认为您需要将GridView绑定到默认的DataView:

GridOpen.DataSource = dt1.DefaultView;

我认为,在绑定到DataTable时不自动使用DefaultView的原因是,在绑定数据源时,您将无法绕过DataView。