我在asp.net页面上使用gridview。并编写一个用于排序的代码,但问题是排序不起作用。你能告诉我我的错误吗?
绑定gridview的代码
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)
{
}
答案 0 :(得分:2)
您的代码可能首先点击排序事件代码,然后再执行常规数据绑定代码。第二个数据绑定消除了第一个数据绑定的影响。尝试在每个位置放置断点。当ASP.NET处理对更新面板的请求时,它会运行整个页面生命周期,而不仅仅是触发更新的事件的事件处理程序。
进一步审核后编辑:
您的代码执行此操作:
dt1.DefaultView.Sort = ...
它改变了与DataTable关联的默认DataView的排序。
然后它将gridview的数据源设置为DataTable本身。
GridOpen.DataSource = dt1;
我相信默认DataView不会用于数据绑定。 (自从我这么做以后,我可能还是错了)。
我认为你需要将GridView绑定到默认的DataView:
GridOpen.DataSource = dt1.DefaultView;
我认为绑定到DataTable时不会自动使用DefaultView的原因是,在绑定到数据源时,您无法绕过DataView。