【问题标题】:C# grid binding not updateC# 网格绑定不更新
【发布时间】:2008-09-22 22:40:20
【问题描述】:

我有一个绑定到集合的网格。由于某种我不知道的原因,现在当我在网格中执行某些操作时,网格不会更新。

情况:当我单击网格中的按钮时,它会增加同一行中的值。当我单击时,我可以调试并查看值增量,但网格中的值不会改变。 但是当我单击按钮、最小化并恢复窗口时,值会更新...我需要做什么才能像以前一样更新值?

更新 这没有解决,但我在这里接受了最好的答案。

它没有解决,因为当数据来自数据库而不是缓存时,它照常工作。对象被序列化并在事件丢失的过程中被抛出。这就是为什么我重新构建它们并且它适用于我所知道的,因为我可以与它们交互但似乎由于未知原因它不适用于更新网格。

【问题讨论】:

    标签: c# data-binding datagridview


    【解决方案1】:

    为了使绑定是双向的,从控件到数据源以及从数据源到控制数据源必须以两种可能的方式之一实现属性更改通知事件:

    • 实现INotifyPropertyChanged接口,并在属性变化时引发事件:

      public string Name 
      {
        get
        {
          return this._Name;
        }
        set
        {
          if (value != this._Name)
          {
              this._Name= value;
              NotifyPropertyChanged("Name");
          }
        }
      }
      
    • 为每个必须在控件更改时通知控件的属性实现更改事件。事件名称必须采用 PropertyNameChanged :

      形式
      public event EventHandler NameChanged;
      
      public string Name 
      {
        get
        {
          return this._Name;
        }
        set
        {
          if (value != this._Name)
          {
              this._Name= value;
              if (NameChanged != null) NameChanged(this, EventArgs.Empty);
          }
        }
      }
      

      *请注意,您的属性值在窗口最大化后是正确的,因为控件会重新读取数据源中的值。

    【讨论】:

    • Pop Catalin 你说得有道理,这已经完成了。我在项目中有 2 个网格具有相同的对象和 1 个网格工作,另一个没有:(
    • 您的意思是,您有一个对象(1 个实例)同时绑定在 2 个网格中?按钮在其中一个网格中?如果是这种情况,您需要在绑定源上调用 EndEdit(),以便将编辑传播到数据源,然后在第二个网格中可见。
    • 我只是意识到一切都很好,但当网格从我们的缓存系统加载时就不行了。可能是序列化削减了一些东西。我会检查
    【解决方案2】:

    听起来您需要在更新代码中调用 DataBind。

    【讨论】:

      【解决方案3】:

      我在我的 Collection 和我的 Grid 之间使用 BindingSource 对象。通常我不需要打电话。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-21
        相关资源
        最近更新 更多