C # Custom DataView - PullRequest
       8

C # Custom DataView

0 голосов
/ 15 сентября 2009

У меня есть некоторые требования для реализации очень нестандартной сортировки в моей сетке данных, сетка в настоящее время привязана к DataView с набором фильтра строк данных Исходных строк, данные поступают в реальном времени, поэтому я делаю изменения, принимаемые на таймер каждую секунду, чтобы показать любые изменения, сделанные в базовой таблице данных. Сетка доступна только для чтения, она просто отображает данные в реальном времени.

Для краткости я пропущу детали сортировки. Чтобы решить эту проблему, я реализовал некоторое пользовательское представление данных (только для чтения), которое принимает DataView в качестве исходных данных (что позволяет мне по-прежнему фильтровать состояние строки и сохранять шаблон виртуальной сетки для данных в реальном времени). Это представление сбора / данных может быть связано с сеткой. Моя проблема заключается в том, чтобы обновлять внутреннюю коллекцию пользовательского представления с учетом любых изменений в базовом представлении данных. Сначала я попытался прослушать событие ListChanged базового представления данных, но даже если я добавлю только одну строку в базовую таблицу данных и вызову принимаю изменения, я получу тип события Reset, означающий, что мне нужно обновить всю коллекцию - мы могли бы говорить о тысячи строк обновляются (и сортируются) только из-за обновления одной строки.

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

Извините за длинный пост !!

Цените любые входные данные, обходные пути или даже альтернативы дизайна ...

Спасибо Адриан

1 Ответ

0 голосов
/ 15 сентября 2009

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

Как говорится, в чем причина постоянного вызова AcceptChanges на DataTable? Все, что нужно сделать, это установить RowState во всех строках на Original, что не должно влиять на то, что фильтруется и сортируется через DataView, который вы используете, если только у него нет активного RowStateFilter.

Если вы переадресовываете вызов на AcceptChanges (или даже если вы вызываете его на отдельном DataRow, а не на DataTable), вы сможете использовать ListChanged.

...