Есть на форме элемент DevExpress.XtraTreeList.TreeList (или System.Windows.Forms.DataGridView).
Заполняем таблицу тестовыми данными:
DataTable TableTree = new DataTable();
TableTree.Columns.Add("ID", typeof (int));
TableTree.Columns.Add("Name", typeof(string));
TableTree.Columns.Add("ParentID", typeof(int));
TableTree.Columns.Add("Value", typeof(string));
TableTree.PrimaryKey = new DataColumn[]{TableTree.Columns[0]};
Связываем элемент с таблицей и делаем начальные установки:
— в случае TreeList:
treeListTest.RootValue = DBNull.Value;
treeListTest.DataSource = TableTree;
treeListTest.ExpandAll();
— в случае DataGridView:
dataGridView1.DataSource = TableTree;
Связываем поле какого-нибудь текстового элемента со столбцом "Value" таблицы:
textBox1.DataBindings.Add("Text", TableTree, "Value", true, DataSourceUpdateMode.OnPropertyChanged);
Устанавливаем обрабочики для таблицы:
TableTree.ColumnChanged += new DataColumnChangeEventHandler(HandleColumnChangeEventTableTreeData);
BindingContext[TableTree].PositionChanged += new EventHandler(TableTree_PositionChanged);
В элементе DataGridView или TreeList встаём, например, на вторую строку, и меняем значение в текстовом поле, в результате срабатывает ColumnChanged и попадаем в HandleColumnChangeEventTableTreeData, — всё правильно.
Но если теперь просто переместимся на третью строку, то почему-то опять срабатывает ColumnChanged и вновь попадаем в HandleColumnChangeEventTableTreeData, и лишь только потом в TableTree_PositionChanged (срабатывает PositionChanged).
Чем вызвано повторное лишнее срабатывание ColumnChanged при переходе на другую строку, и как от этого избавиться?