Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Лишнее срабатывание ColumnChanged в DataTable, срабатывает при переходе по строкам 
:(
    Опции темы
prigur
Дата 6.10.2013, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 6.10.2013

Репутация: нет
Всего: нет



Есть на форме элемент 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 при переходе на другую строку, и как от этого избавиться?

PM MAIL   Вверх
Telepyz
Дата 7.10.2013, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 9.7.2007

Репутация: нет
Всего: 1



Если мне не изменяет память, то при перемещении по строкам выбирается ячейка (выбирается строка, столбец), а то что выбрана вся строка это всего лишь опция ГридВью, который подкрашивает всю строку с выбранной ячейкой

Так что в принципе все верно
--------------------
обновить драйвер
PM MAIL   Вверх
prigur
Дата 7.10.2013, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 6.10.2013

Репутация: нет
Всего: нет



Когда стоим на строке (хорошо, пусть будет - на ячейке) и меняем значение, то об этом приходит сообщение. А если перемещаемся затем на следующую строку, то опять же приходит сообщение об изменении этого поля (явно лишнее), и только потом - что перешли на новую строку.
PM MAIL   Вверх
prigur
Дата 7.10.2013, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 6.10.2013

Репутация: нет
Всего: нет



Максимально упрощённый тестовый пример.

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Тестовый_пример.rar 32,82 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0924 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.