我在自己的UpdatePanels中都有几个gridview。我有一些用于过滤数据的按钮,但是在我无法检测到其来源的时候注意到了异常的更新和删除。我孤立的一件事是,当我在一个UpdatePanel中对gridviews数据进行排序,然后尝试更新另一个UpdatePanel时,会发生这种情况。
(我的所有网格视图都从同一DataLoad过程获取数据,该过程基于不同的Linq查询填充每个网格视图。)
我通过在排序函数之后在所有UpdatePanel上调用.Update()解决了大多数异常更新,因此所有“网格视图”都被“刷新”了。但是,仍然有一些实例正在更新数据,我无法隔离源。
看起来一个UpdatePanel外部的数据实际上是在“幕后”进行更新的,只有缓存的数据在屏幕上,然后当我编辑屏幕上的内容时,错误的数据将被更新,因为它没有刷新。
我猜测我的排序策略是错误的,因为当用户单击列标题时,我正在对所有网格视图而不是仅特定的网格视图进行排序。
以下是每个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的人,并且希望获得解决这种情况的任何指导。
答案 0 :(得分:4)
您发布的代码没有错。问题不在那个片段中,与ViewState或UpdatePanel无关。如果您不确定所发生的事情,则有助于对其进行可视化。通过调试或仅将结果显示在Label中,然后查看结果是否符合您的预期。
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();
}
答案 1 :(得分:3)
为ViewState使用属性,这可能是由PostBack的Post Process引起的。
ul.sidenav {
list-style-type: none;
margin: 0;
padding: 0;
width: 25%;
background-color: #f1f1f1;
position: fixed;
height: 100%;
overflow: auto;
}
ul.sidenav li a {
display: block;
color: #000;
padding: 8px 16px;
text-decoration: none;
}
ul.sidenav li a.active {
background-color: #4CAF50;
color: white;
}
ul.sidenav li a:hover:not(.active) {
background-color: #555;
color: white;
}
div.content {
margin-left: 25%;
padding: 1px 16px;
height: 1000px;
}
@media screen and (max-width: 900px) {
ul.sidenav {
width: 100%;
height: auto;
position: relative;
}
ul.sidenav li a {
float: left;
padding: 15px;
}
div.content {margin-left: 0;}
}
@media screen and (max-width: 400px) {
ul.sidenav li a {
text-align: center;
float: none;
}
}
然后在您的函数中尝试调用属性,并记住将它们设置在正确的函数上以提高可用性