DataGridView & BindingList: как проверить, изменилось ли значение ячейки? - PullRequest
5 голосов
/ 10 октября 2011

У меня есть представление данных с 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.

Спасибо за помощь.

1 Ответ

0 голосов
/ 10 октября 2011

Для решения этой проблемы лучше всего использовать 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());
    }
}

Проблема в том, что нет способа (я могу придумать) получить правильные свойства ячейки, поэтому вам придется переоценивать все столбцы, а не только столбец, содержащий изменение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...