【问题标题】:Databind not refreshing Gridview数据绑定不刷新 Gridview
【发布时间】:2011-09-29 15:37:28
【问题描述】:

我有一个网格视图,我在我的代码隐藏中动态地进行数据绑定。出于某种原因,只有当用户从 gridview 中删除一行时(使用自定义函数),在回发之后,gridview 才不会刷新(删除的值仍然存在)。但是,如果用户要以任何其他方式刷新 gridview(即添加项目、在另一个选项卡中选择正确的项目等),它就可以正常绑定。

我在我的代码隐藏中放置了断点以查看发生了什么,显然 gridview 被正确绑定,并且被删除的项目不在它的 gridview.DataSource 中。

这是我的代码,所以如果你看到我没有看到的,请告诉我!

删除行命令:

if (e.CommandName == "delete")
        {
            int selectedId = int.Parse(e.CommandArgument.ToString());
            //delete selected row from database
            var item = (Item)DataContext.Items.Where(item => item.ItemId == selectedId).Single();
            if (item != null)
            {
                DataContext.CompanyGoalPrograms.DeleteObject(item);
            }
            DataContext.SaveChanges();

            bindGridView(currentId); //firing, but not refreshing gv after postback
            // currentId is a static variable
        }

bindGridView 方法(每隔一次调用一次,所以我认为问题不在这里):

protected void bindGridView(long thisId)
    {
        var query = from items in DataContext.Items
                    where items.SubSomething.Something.SomethingId == thisId && goals.SubSomething.YearId == selectedYearId //<--another static variable
                    select items;
        Gridview1.DataSource = from items in query.AsEnumerable()
                                    select new
                                    {
                                        items.Field1,
                                        items.Field2,
                                        items.Field3,
                                        Field4 = ((decimal)items.Field4).ToString("N2"),
                                        Field5 = ((decimal)items.Field5).ToString("N2"),
                                        Field6 = String.Format("{0:#,##0}", (long)items.Field6),
                                        Field7 = items.Field4 == null ? "$0.00" : ((decimal)items.Field7).ToString("C"),
                                    };
        Gridview1.DataBind();
     }

[编辑] 有趣的是,它不仅会运行,而且当我在运行后检查数据源的内容(调试时)时,实际上删除的项目 从数据源中删除的,它只是不会向用户显示更改。

【问题讨论】:

  • 只是为了摆脱它,试试Gridview1.DataSource = (from ....).ToList(); 看看是否有什么不同。
  • 你的 gridview 在 AJAX 更新面板中吗?
  • @Bala R nope...它仍然出现
  • @Muhammad 所有的内容都包装在一个 asp:UpdatePanel 中(不确定这是否是您的意思,因为我们也在使用 AjaxControlToolkit)
  • @Jordan 每页单页还是每页多页?

标签: c# asp.net data-binding gridview postback


【解决方案1】:

这完全是我的问题。我将“删除”作为 asp:ImageButton 的 CommandName 传递。看到您的帖子后,我将其更改为通过“DeleteThis”并立即开始工作。像这样的保留字问题......!

感谢您在事后发布解决方案。它至少帮助了一个人。

维克多·德尔普雷特

【讨论】:

    【解决方案2】:

    我发现了问题:

    Gridview 设置了预定义的命令,例如“选择”、“编辑”和“删除”。当我尝试定义我自己的事件以使用命令名称“删除”运行时,程序将尝试运行我的部分事件以及它的预定义事件。这就是造成问题的原因。

    【讨论】:

      【解决方案3】:

      bindgridview 是否确定运行?你有没有在调试模式下运行过验证?

      【讨论】:

      • 是的。有趣的是,它不仅运行,而且当我检查数据源的内容之后它运行(同时调试),被删除的项目实际上从数据源中删除,它只是不向用户显示更改
      猜你喜欢
      • 2013-07-22
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      相关资源
      最近更新 更多