簡體   English   中英

DataGridView和BindingList:如何檢查單元格值是否已更改?

[英]DataGridView & BindingList : How to check if cell value has changed?

我有datagridview,DataSource設置為myBindingList。 列表項目實現INotifyPropertyChanged,因此datagridview會自動響應列表中的更改。

現在我必須計算一些datagridview列的摘要。

它應該在以下時間完成:

  • 數據源更改(OnDataSourceChanged)
  • 單元格值更改(OnCellValueChanged)

第一個很清楚,但第二個問題我遇到了一個小問題。

當用戶通過控制或更改時更改單元格的值時,將觸發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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM