powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Лишнее сообщение ColumnChanged при переходе на другую строку (DataTable в C#)
2 сообщений из 2, страница 1 из 1
Лишнее сообщение ColumnChanged при переходе на другую строку (DataTable в C#)
    #38417728
Prigur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть на форме элемент 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]};

DataRow row_ = TableTree.NewRow();
row_.BeginEdit();
row_["ID"] = 0;
row_["ParentID"] = DBNull.Value;
row_["Name"] = "Ветвь 1";
row_["Value"] = "";
row_.EndEdit();
TableTree.Rows.Add(row_);

row_ = TableTree.NewRow();
row_.BeginEdit();
row_["ID"] = 1;
row_["ParentID"] = 0;
row_["Name"] = "Ветвь 2";
row_["Value"] = "";
row_.EndEdit();
TableTree.Rows.Add(row_);

row_ = TableTree.NewRow();
row_.BeginEdit();
row_["ID"] = 2;
row_["ParentID"] = DBNull.Value;
row_["Name"] = "Ветвь 3";
row_["Value"] = "";
row_.EndEdit();
TableTree.Rows.Add(row_);

Связываем элемент с таблицей и делаем начальные установки:
- в случае 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);

void HandleColumnChangeEventTableTreeData(object sender, DataColumnChangeEventArgs e)
{
}

void TableTree_PositionChanged(object sender, EventArgs e)
{
}

В элементе DataGridView или TreeList встаём, например, на вторую строку, и меняем значение в текстовом поле, в результате срабатывает ColumnChanged и попадаем в HandleColumnChangeEventTableTreeData, - всё правильно.
Но если теперь просто переместимся на третью строку, то почему-то опять срабатывает ColumnChanged и вновь попадаем в HandleColumnChangeEventTableTreeData, и лишь только потом в TableTree_PositionChanged (срабатывает PositionChanged).
Чем вызвано повторное лишнее срабатывание ColumnChanged при переходе на другую строку, и как от этого избавиться?
...
Рейтинг: 0 / 0
Лишнее сообщение ColumnChanged при переходе на другую строку (DataTable в C#)
    #38419491
Prigur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максимально упрощённый тестовый пример.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Лишнее сообщение ColumnChanged при переходе на другую строку (DataTable в C#)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]