C # Повторное использование адаптера для заполнения других элементов управления - PullRequest
0 голосов
/ 01 декабря 2009

Я использую следующий код для заполнения DataGridView (sqliteAdapter является производным от DbDataAdapter):

sqliteAdapter.SelectCommand.CommandText = SQLCommand;
sqliteConn.Open();
using (DataTable dt = new DataTable())
{
    sqLiteAdapter.Fill(dt);
    dataGridRes.DataSource = dt;
}

Фактическая команда SQLC:

SELECT Email NOTNULL AS Sel, Regiao, Distrito, Grupo, MG, ID, Nome, Morada, Email
FROM assessores

Теперь я хотел бы повторно использовать эту таблицу данных для заполнения других элементов управления в форме. А именно 4 элемента управления CheckedListBox. Я надеялся избежать дальнейших подключений к базе данных, «отфильтровав» текущий DataTable к чему-то вроде (Неверный код. Только для иллюстрации)

SELECT Distinct Regiao FROM DataTable
SELECT Distinct Distrito FROM DataTable
SELECT Distinct Grupo FROM DataTable
SELECT Distinct MG FROM DataTable

Мои набеги на адаптер и свойства и методы DataTable оказались бесплодными.

Ответы [ 2 ]

1 голос
/ 01 декабря 2009

Элементы управления могут быть связаны с любой коллекцией, а не только с DataTable.
Поэтому вы можете использовать LINQ, например:

myControl.DataSource = dt.AsEnumerable().Select(dr => dr.Field<string>("Regiao")).Distinct().ToArray();
0 голосов
/ 01 декабря 2009

Вы можете отфильтровать DataTable, но он возвращает массив объектов DataRow, а не отфильтрованный DataTable, который нельзя напрямую привязать к DataGrid или другому элементу управления, привязанному к данным. Вместо этого используйте DataView:

DataView dv = new DataView(dt);
dv.RowFilter = "Filter Expresion";

dg.DataSource = dv;

См. Сортировка и фильтрация данных с использованием DataView

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...