【问题标题】:C# Datagridview Binding to a Class not updatingC# Datagridview 绑定到类不更新
【发布时间】:2011-07-28 15:22:16
【问题描述】:

我有一个绑定到类的数据网格视图。我添加到类,但 datagridview 没有更新。

我的绑定:

  ScannedChecks = new ScannedChecks();
  ScannedChecks.AddCheck(DateTime.Now, "22222", "checknumdd", "routingdd", _checkData, 4);
  dataGridView1.DataSource = ScannedChecks;

我继续进行了 AddCheck 以查看它是否到达了 datagridview,但它不是……不过,该类正在更新。

我的班级:

namespace SSS.Ckentry
{
  public class ScannedChecks  : INotifyPropertyChanged
  {
    public event PropertyChangedEventHandler PropertyChanged;

    public ScannedChecks()
    {
      ScannedChecksCollection = new ObservableCollection<ScannedCheck>();
    }

    public void AddCheck(DateTime checkDate, string accountNumber, string checkNumber, string bankRoutingNumber, string bankAccountNumber, decimal checkAmount)
    {
      var scc = new ScannedCheck
                  {
                    CheckDate = checkDate,
                    AccountNumber = accountNumber,
                    CheckNumber = checkNumber,
                    BankRoutingNumber = bankRoutingNumber,
                    BankAccountNumber = bankAccountNumber,
                    CheckAmount = checkAmount,
                  };

      ScannedChecksCollection.Add(scc);

    }

    public ObservableCollection<ScannedCheck> ScannedChecksCollection { get; set; }

    public class ScannedCheck
    {
      public DateTime CheckDate { get; set; }
      public string AccountNumber { get; set; }
      public string CheckNumber { get; set; }
      public string BankRoutingNumber { get; set; }
      public string BankAccountNumber { get; set; }
      public decimal CheckAmount { get; set; }
    }


  }

}

谁能告诉我我做错了什么?

非常感谢!

【问题讨论】:

    标签: c# binding datagridview inotifypropertychanged


    【解决方案1】:

    如果您曾经将 ScannedChecksCollection 替换为新的 ScannedChecksCollection,则属性设置器应触发 PropertyChanged exent。

        private ObservableCollection<ScannedCheck> scannedChecksCollection;
        public ObservableCollection<ScannedCheck> ScannedChecksCollection {
            get
            {
                return scannedChecksCollection; 
            }
            set
            {
                if (value != scannedChecksCollection)
                {
                    value = scannedChecksCollection;
                    NotifyPropertyChanged("ScannedChecksCollection");
                }
            }
        }
    
        private void NotifyPropertyChanged(string propName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propName));
        }
    

    如果检查是可修改的,ScannedCheck 应该实现 INotifyPropertyChanged

    【讨论】:

    • 同样,他需要通知他的对象属性的道具更改,而不是使用快捷方式获取/设置。
    • And... 而不是 AddCheck(...) 他可以只是 ScannedChecks.Add(New ScannedCheck() { CheckDate = .... });
    【解决方案2】:

    你不应该这样做

    dataGridView1.DataSource = ScannedChecks.ScannedChecksCollection;
    

    【讨论】:

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