Datagridview数据列不会更新(嵌套属性)

时间:2010-01-16 16:58:21

标签: c# datagridview

这将是一个愚蠢的问题,但在集合中有一个Datagridview和一个数据对象。 de datagridview的数据源设置为此集合(类型为BindingList)。

当我更新属性时,将显示所有数据并且datagrid中的某些数据也会更新。但仅限于数据对象的第一级。更改第二级属性(来自嵌套对象)将不会使用新值自动刷新数据网格的数据列。

示例:

class A
{ 
  public string SampleField;
  public B ClassB;
}
class B
{
  public string FieldB;
}

当B.FieldB类按代码更新时,datagridview不会显示更改。

我也尝试使用datagrid的CelLFormatting_Event,但它不会触发事件。

另一个解决方案是调用BindingList.ResetBindings(),但是在这种情况下,datagridview重新显示所有不好看的东西(你会看到al row再次构建)。

所以,我的问题是,解决这个问题的最佳解决方案是什么。

感谢。

1 个答案:

答案 0 :(得分:1)

DGV未更新,因为您的代码在值更改时未通知DGV。您需要在两个类中实现INotifyPropertyChanged。为此,您还需要将字段更改为属性:

class A : INotifyPropertyChanged
{ 
  private string _sampleField;
  public string SampleField
  {
      get { return _sampleField; }
      set
      {
           _sampleField = value;
           OnPropertyChanged("SampleField");
      }
  };

  private B _classB
  public B ClassB
  {
      get { return _classB; }
      set
      {
           _classB = value;
           OnPropertyChanged("ClassB");
      }
  }

  public event PropertyChangedEventHandler PropertyChanged;

  protected virtual void OnPropertyChanged(string propertyName)
  {
      PropertyChangedEventHander handler = PropertyChanged;
      if (handler != null)
          handler(this, new PropertyChangedEventArgs(propertyName);
  }
}

class B : INotifyPropertyChanged
{
  private string _fieldB;
  public string FieldB
  {
      get { return _fieldB; }
      set
      {
           _fieldB = value;
           OnPropertyChanged("FieldB");
      }
  }

  public event PropertyChangedEventHandler PropertyChanged;

  protected virtual void OnPropertyChanged(string propertyName)
  {
      PropertyChangedEventHander handler = PropertyChanged;
      if (handler != null)
          handler(this, new PropertyChangedEventArgs(propertyName);
  }
}