我有几个 GridView ,每个 GridView 都在自己的 UpdatePanel 中。我有过滤数据的按钮,但有时我注意到不寻常的更新和删除,但我无法检测到其来源。我隔离的一件事是,当我在一个 UpdatePanel 中对 gridviews 数据进行排序,然后尝试更新另一个 UpdatePanel 时,就会发生这种情况。
(我的 gridview 都从同一个 DataLoad 过程获取数据,该过程根据不同的 Linq 查询填充每个 gridview。)
我通过在排序函数之后调用所有 UpdatePanel 上的 .Update() 解决了大多数不寻常的更新,因此所有 GridView 都被“刷新”。但仍然存在一些数据正在更新的情况,我无法隔离源。
看起来 UpdatePanel 外部的数据实际上是在“幕后”更新,并且屏幕上只有缓存的数据,然后当我编辑屏幕上的内容时,错误的数据会被更新,因为它没有刷新。
我猜测我的排序策略不正确,因为当用户单击列标题时,我对所有 GridView 进行排序,而不是仅对特定 GridView 进行排序。
这是我的排序过程,由每个 gridview 调用:
protected void TaskGridView_Sorting(object sender, GridViewSortEventArgs e)
{
string sortExp = ViewState["SortExpression"] as string;
string sortDir = ViewState["SortDirection"] as string;
if(sortDir == "asc" & sortExp == e.SortExpression.ToString())
ViewState["SortDirection"] = "desc";
else
ViewState["SortDirection"] = "asc";
ViewState["SortExpression"] = e.SortExpression.ToString();
if(searchCol != "" && searchText != "")
DataGrid_Load(DAL.Search_reg_log(OrgText.Text, searchText, searchCol), "reg");
else
DataGrid_Load(DAL.reg_log(HeadText.Text, OrgText.Text), "reg");
UpdatePanels();
}
我是使用 Ajax 和 UpdatePanels 的新手,希望得到有关解决此情况的任何指示。
最佳答案
您发布的代码没有任何问题。问题不在该代码片段中,与 ViewState 或 UpdatePanel 无关。如果您不确定发生了什么,将其形象化会有所帮助。通过调试或仅在标签中显示结果,看看它是否是您所期望的。
protected void TaskGridView_Sorting(object sender, GridViewSortEventArgs e)
{
//load the previous sorting settings
string sortExp = ViewState["SortExpression"] as string;
string sortDir = ViewState["SortDirection"] as string;
//reverse the direction if the column is the same as the previous sort
if (sortDir == "asc" & sortExp == e.SortExpression.ToString())
ViewState["SortDirection"] = "desc";
else
ViewState["SortDirection"] = "asc";
//put the current sort column in the viewstate
ViewState["SortExpression"] = e.SortExpression.ToString();
//show sorting result in a literal for testing
Literal1.Text = ViewState["SortExpression"] + " " + ViewState["SortDirection"];
//rebind data
if (searchCol != "" && searchText != "")
DataGrid_Load(DAL.Search_reg_log(OrgText.Text, searchText, searchCol), "reg");
else
DataGrid_Load(DAL.reg_log(HeadText.Text, OrgText.Text), "reg");
//update the updatepanels
UpdatePanels();
}
关于c# - UpdatePanel内的Gridview删除记录,更新错误的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53326793/