Имеется
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 данные таблицы с учетом примененного фильтра?