none
Как в DataGridView получить доступ к данным, которые она показывает (.Net VB Express) RRS feed

  • Вопрос

  • Имеется System.Windows.Forms.DataGridView данные в которой показываются из таблицы базы данных MS SQL Server Compact. Для этого используется набор данных и таблица (System.Data.DataSet и DataTable ). Все создано визуально, в IDE. Грид ссылается на данные через System.Windows.Forms.BindingSource .

    Есть длительная задача, связанная с перебором строк в таблице. При этом может использоваться фильтр (устанавливается свойство BindingSource.Filter). Приходится использовать System.ComponentModel.BackgroundWorker . Увы, в его основном событии (DoWork) нельзя использовать визуальные элементы. Это значит, что перебор строк по BindingSource не пройдет (у меня были в связи с этим проблемы, попробовал). Значит нужно передать представление (например, System.Data.DataView ) и его перебирать.

    Проблема в том, что представление, которое использует DataGridView как получить я не понял. Ничего на эту тему не нашел. А свойство таблицы (System.Data.DataTable.DefaultView ) выдает нефильтрованное представление и его снова нужно фильтровать. Я в итоге так и делаю.

    Возникает вопрос а верный ли это путь в .Net? Есть ли другие варианты передать в BackgroundWorker данные таблицы с учетом примененного фильтра?

    • Изменен тип I.Vorontsov 30 августа 2010 г. 5:36
    • Изменен тип I.Vorontsov 6 сентября 2010 г. 5:08
    • Перемещено SachinW 1 октября 2010 г. 21:01 MSDN Forums Consolidation (От:Начинающие разработчики)
    8 августа 2010 г. 22:00

Ответы

  • Нашел сам. Оказывается, все что нужно есть в свойстве System.Windows.Forms.BindingSource. List. Нужно просто привести его к типу System.Data.DataView . Там уже учтена примененная сортировка и фильтр (если они применены к BindongSource).

    Получается, что бывает очень полезно смотреть в отладчике типы свойств и переменных.

    • Помечено в качестве ответа I.Vorontsov 6 сентября 2010 г. 5:08
    4 сентября 2010 г. 20:35