[英]DataGridView & BindingList : How to check if cell value has changed?
我有datagridview,DataSource設置為myBindingList。 列表項目實現INotifyPropertyChanged,因此datagridview會自動響應列表中的更改。
現在我必須計算一些datagridview列的摘要。
它應該在以下時間完成:
第一個很清楚,但第二個問題我遇到了一個小問題。
當用戶通過控制或更改時更改單元格的值時,將觸發OnCellValueChanged:
myDataGridView.Rows[x].Cells[y].Value=newValue;
但是關於:
myBindingList[myInvoice].Property1=newValue;
DataGridView會自動刷新(INotifyPropertyChanged),但它不會觸發OnCellValueChanged事件。
知道如何從我的DataGridView獲取此類信息? 它必須在DataGridView級別上完成,因為我正在編寫自己的控件,擴展了dgv。
謝謝您的幫助。
我能想到的最接近的解決方法是使用BindingSource作為數據源,然后在自定義DataGridView中引發自己的事件以響應BindingSource ListChanged事件。
我可能會覆蓋OnDataSourceChanged這樣的東西:
public event EventHandler CustomCellValueChanged;
protected override void OnDataSourceChanged(EventArgs e)
{
bs = this.DataSource as BindingSource;
if (bs == null)
{
throw new ArgumentException("DataSource must be a BindingSource");
}
bs.ListChanged += new System.ComponentModel.ListChangedEventHandler(bs_ListChanged);
base.OnDataSourceChanged(e);
}
void bs_ListChanged(object sender, System.ComponentModel.ListChangedEventArgs e)
{
if (CustomCellValueChanged != null)
{
CustomCellValueChanged(this, new EventArgs());
}
}
這樣做的問題是,我無法(我能想到)獲得正確的單元屬性,因此您必須重新評估所有列,而不僅僅是包含更改的列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.