Devexpress: очистка привязанных элементов управления полностью отфильтрованного GridControl - PullRequest
0 голосов
/ 10 декабря 2011

У меня есть Devexpress.XtraGrid.GridControl, для которого я установил DataSource на DataTable. У меня также есть несколько других элементов управления, которые имеют привязку данных к тому же DataTable. Это хорошо работает, так что при изменении выбранной строки GridView элементы управления отражают это изменение.

Однако на GridControl GridView я установил ActiveFilter.NonColumnFilter. Этот фильтр изменяется по мере использования формы. Иногда фильтр устанавливается на что-то, что не отображает строки в GridControl. Когда это происходит, элементы управления, связанные с DataTable, не очищаются, а вместо этого показывают данные из последней выбранной строки.

Есть ли что-то простое, что я могу сделать, чтобы очистить привязанные элементы управления, или мне нужно вручную просмотреть их все и очистить?

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

1 Ответ

0 голосов
/ 13 декабря 2011

Я связался с DevExpress по этому вопросу и получил ответ :

Спасибо за ваш вопрос. Когда сетка полностью отфильтрована и не содержит строк, она не может установить текущий элемент в источнике привязки.

Чтобы решить эту проблему, я предлагаю вам отфильтровать данные на уровне источника данных.

Используя эту информацию, я перестал использовать GridView.ActiveFilter.NonColumnFilter для своих нужд фильтрации и вместо этого использовал DataTable.DefaultView.RowFilter. Похоже, это решило мою проблему.

Это отличалось от примера, который мне дали:

BindingSource bs = new BindingSource();
DataView dv = new DataView();

DataTable dt = CreateTable(10);
dv = new DataView(dt);
bs.DataSource = dv;

gridControl1.DataSource = bs;
textEdit1.DataBindings.Add("EditValue",bs,"Name");
textEdit2.DataBindings.Add("EditValue", bs, "ID");

Затем вы можете вызвать это, чтобы установить фильтр:

   dv.RowFilter = "ID = 50";
...