【问题标题】:Cant get Gridview to refresh on update inside Update panel无法让 Gridview 刷新更新面板内的更新
【发布时间】:2013-12-06 09:56:57
【问题描述】:

我已经尝试了所有我能找到的博客和论坛答案,但我仍然坚持了几天,想知道是否有人可以帮忙。

我的问题是我在 UpdatePanel 中有一个 Gridview,链接到 SQLDataSource。

第一次加载页面时(不是回发),我从三个数据库表中提取信息并将其写入数据库中的一个新的半临时表,然后将 SQLDataSource 设置为从这个新表中选择全部并显示在我的网格视图中。这很好用。

当表格显示时,用户可以编辑或选择一行。如果选择了一行,它将突出显示它并将该行标记为突出显示的临时表写入(以便以后重新渲染),这可以正常工作。

如果用户点击编辑,我将 Gridview 设置为编辑模式:

protected void DailySheetGV_RowEditing(object sender, GridViewEditEventArgs e)
{
    // put Gridview into edit mode //
    rowEditted = e.NewEditIndex;
    DailySheetGV.EditIndex = rowEditted;
    SqlDataSource1.SelectCommand = "SELECT * FROM ReportTempTable";
    DailySheetGV.DataBind();
    // ## //
}

这很好用。

我的问题是,当用户单击更新时,我将更新后的值写入我的表,这工作正常,但对于我来说,我无法让它刷新 Gridview使用更新后的表的值重新绑定数据(即从 tempTable 重新创建 gridview)。

到目前为止,我已经尝试使用自动生成的更新按钮,它贯穿所有 _RowUpdating()、_PreRender() 等函数,但无论我从哪里运行刷新代码,它都不会刷新我的网格视图甚至停止显示更新按钮并更改回编辑按钮(注意:如果我点击刷新按钮,它会这样做)。

这是我自己函数中的刷新代码:

private void rebindGV()
{
    DailySheetGV.DataSourceID = null;
    DailySheetGV.EditIndex = -1;
    DailySheetGV.DataBind();

    UpdatePanel0.DataBind();

    SqlDataSource1.SelectCommand = "SELECT * FROM ReportTempTable";
    DailySheetGV.DataSourceID = "SqlDataSource1";
    DailySheetGV.EditIndex = -1;
    DailySheetGV.DataBind();
}

我也尝试过使用标记为“更新”的链接按钮并设置其 CommandName="Update" 这实际上会更新并将 gridview 重置为 EditIndex=-1(即再次显示编辑按钮)但通过我的代码进行调试并没有'不运行任何 _PreRender()、_RowUpdated 等函数,因此不会将 Gridview 数据更新为最新值,因为它实际上并没有重新渲染。

如果没有头发可以拔掉,我们会非常感谢任何帮助。

非常感谢。

使用 MS SQL、ASP.NET4 和 C#。

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:

    这个论坛一定有什么神奇之处,当我发布这个问题时,我意识到“如果我把这个添加到这里会怎样”的感觉,瞧!现在一切正常:)

    无论如何回答我的问题并帮助其他人现在是我的 refreshGV 代码

    {
        DailySheetGV.DataSourceID = null;
        DailySheetGV.EditIndex = -1;
        DailySheetGV.DataBind();
    
        UpdatePanel0.DataBind();
        UpdatePanel0.Update(); // new line added to get updatepanel to refresh
    
        SqlDataSource1.SelectCommand = "SELECT * FROM ReportTempTable";
        DailySheetGV.DataSourceID = "SqlDataSource1";
        DailySheetGV.EditIndex = -1;
        DailySheetGV.DataBind();
    }
    

    当我有时间看看我真正需要哪些行时,我会做更多的实验。

    干杯

    【讨论】:

    • 我遇到了同样的问题,只是它被切换了。 GV 已更新,但写入 SQL 表无法正常工作。请让我知道如何在我的问题中编辑它:stackoverflow.com/questions/28861925/…
    • 您好,希望您找到答案,因为您的链接不再指向有效问题。一切顺利。
    • 是的,抱歉忘记更新了。感谢您的回复。谢谢你。您的回答实际上帮助了我,所以 +1
    【解决方案2】:

    在您将表更新回临时表/某些表之前检查天气值是否真正更新回数据库。对于网络应用程序中的任何更新查询,请查看以下提示。

    • 更新后检查更新的内容/未使用断点。
    • 如果数据库中的表完全更新成功,则检查 grid-view / list-view 的属性,其 auto-post-back 设置为 true。
    • 如果您使用更新面板,请设置事件基础,它会重新加载/不(只需重新加载面板/刷新面板)
    • 有时页面本身不会生成回发,这可能是原因(它没有存储更新的字段值/加载值...)

    希望您按照所有步骤再次调试应用程序...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多