在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处理更新面板的请求时,它会运行整个页面生命周期,而不仅仅是触发更新的事件的事件处理程序。
进一步审查后编辑:
你的代码是这样做的:
dt1.DefaultView.Sort = ...
它更改与DataTable关联的默认DataView的排序。
但随后它将gridview的数据源设置为DataTable本身。
GridOpen.DataSource = dt1;
我相信默认DataView没有用于数据绑定。(我做这件事已经有一段时间了,我可能还是错了)。
我认为您需要将GridView绑定到默认的DataView:
GridOpen.DataSource = dt1.DefaultView;
我认为,在绑定到DataTable时不自动使用DefaultView的原因是,在绑定数据源时,您将无法绕过DataView。