c# - UpdatePanel内的Gridview删除记录,更新错误的行

标签 c# asp.net ajax gridview updatepanel

我有几个 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/

相关文章:

c# - MVC 访问控制允许来源

javascript - 如何将整数数组作为参数从 javascript 传递到 python?

c# - 让 jqGrid 使用不同的页面来查看一行

c# - 存储用户设置

asp.net - 在 Server 2008 上部署 Office.Interop.Word Word 2010 并从 ASP.NET 调用方法

asp.net - 无法从 azure 网站访问文件

c# - 我们可以在 C# 中为运行时创建的控件在运行时创建多个事件吗

javascript - 刷新(重新发送)xmlhttp 请求在 IE 浏览器中不起作用

c# - 我如何简化这个在字符串中搜索关键字并按相关性排序的 LINQ 查询?

c# - IAppbuilder.UseWebApi 有什么作用?