Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как правильно отображать данные на DataGridView / 6 сообщений из 6, страница 1 из 1
12.05.2014, 15:09
    #38638854
Максим Н
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно отображать данные на DataGridView
Есть простые DTO классы (например Тех.Паспорт, Автомобиль, Владелец и т.д.), есть ORM (sqlite-net), которая отражает таблицы из реляционной БД на списки объектов этих классов (например список всех автомобилей, у которых владельцы старше 25 лет).
Как правильно заполнить датагрид, если помимо данных основного класса нужны данные справочных классов (отобразить автомобили, их владельцев и их тех. паспорта)?

Т.к. DataSource может принимать IEnumerable, то собрал вот такой LINQ-запрос:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
var db = new SQLiteConnection("testdb.db3");
var joinedData = from c in db.Table<Car>().ToList<Car>()
                   join p in db.Table<TehPasport>().ToList<TehPasport>() on c.vin equals p.vin
                   join o in db.Table<Owner>().ToList<Owner>() on o.vin equals c.vin
                   select new { c.Vin, p.Number, o.FirstName };
BindingSource bindingSource1 = new BindingSource();
bindingSource1.DataSource = joinedData;
dataGridView1.DataSource = bindingSource1;



Вроде все устраивает, но тогда отпадает дизайнер таблицы, т.е. я не могу нарисовать колонки, наименовать их, расставить обработчики, сортировку и т.д. Только рантайм. Или нет?

Как вариант могу нарисовать некий производный класс, в котором соберу нужные поля из нескольких классов, который будет соответствовать конкретному DataGrid. Привяжусь к нему в дизайн тайме, а потом отображу свой IEnumerable на этот сводный класс.
Но это решение мне не очень нравится, кода больше, причем дублирующегося.


Подскажите как обычно поступают в таких случаях?
...
Рейтинг: 0 / 0
12.05.2014, 15:33
    #38638885
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно отображать данные на DataGridView
Максим Н,

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

Однако, я вот на что обратил внимание. В коде используются ToList. Зачем? Ведь в таком случае все таблицы целиком будут загружены из БД и лишь затем, уже на клиенте, произойдёт фильтрация по equals.
Имхо, ToList либо совсем не нужен, либо достаточно одного, применённого к результату запроса, уже после объединения.
...
Рейтинг: 0 / 0
13.05.2014, 00:00
    #38639287
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно отображать данные на DataGridView
petalvikну как бы да, сам собой напрашивается вариант создать производный класс со всеми необходимыми свойствами.
+1
Вместо
var joinedData =

List<MyClass> joinedData =
...
Рейтинг: 0 / 0
13.05.2014, 00:03
    #38639290
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно отображать данные на DataGridView
Ах да.
bindingSource1 надо определить в дизайнере
...
Рейтинг: 0 / 0
14.05.2014, 10:00
    #38640581
Максим Н
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно отображать данные на DataGridView
petalvikМаксим Н,

Однако, я вот на что обратил внимание. В коде используются ToList. Зачем? Ведь в таком случае все таблицы целиком будут загружены из БД и лишь затем, уже на клиенте, произойдёт фильтрация по equals.
Имхо, ToList либо совсем не нужен, либо достаточно одного, применённого к результату запроса, уже после объединения.

ToList не нужен, это пример на скорую руку был.
...
Рейтинг: 0 / 0
14.05.2014, 10:00
    #38640583
Максим Н
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно отображать данные на DataGridView
petalvik, Cat2,

Спасибо, пока сделал с производным классом.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как правильно отображать данные на DataGridView / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]