Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2011, 22:46   #1
Lader
 
Регистрация: 12.07.2010
Сообщений: 7
По умолчанию Интересная загрузка в DataGridView.

Доброго времени суток уважаемые коллеги.
Если небольшая задачка для мозгов

Есть программка, которая тянет данные из достаточно крупной бд следующим способом:
Из БД данные вытягиваются с помощью LinQ и загружаются в специально созданные для этого классы, классы складываются в листы и все это добро отправляется в BindingSource, который предварительно подключен к одному из таких классов.
И все бы хорошо, только вот из за лишней прослойки в виде классов данные грузятся достаточно долго, хотелось бы от неё избавится и тут то мы плавно подходим к тому, с чего начали это сообщение, к самой задачке
Допустим есть у нас придуманная от балды БД из двух таблиц:

Если загружать данные в DataGridView только из одной таблицы, то проблем нет:
Код:
       List<Dogovor> dog = new List<Dogovor>();
        using (DataClasses1DataContext db = new DataClasses1DataContext())
        {
            dog = (from dogovor in db.Dogovor
                   select dogovor);
        
        }
Указываем для BindingSource в качестве источника данных LinQ класс Dogovor и отправляем в него результат запроса.
Но что делать если нужно загрузить в грид данные из нескольких таблиц?
Код:
        using (DataClasses1DataContext db = new DataClasses1DataContext())
        {
            var result = (from dogovor in db.Dogovor
                          join pokupatel in db.Pokupatel on dogovor.id == pokupatel.id_dog
                          select new {dogovor.name_dog, pokupatel.Name, pokupatel.sum});      
        }
Конечно можно переменную result кинуть напрямую в грид, но тогда его шапка будет иметь названия name_dog, Name и sum,
а хочется, что бы это все выглядело нормально с соответствующими названиями и форматированием.
Ну и собственно вопрос:
Как такие данные загрузить в DataGridView?

З.Ы. Приведенный выше для примера код чисто ознакомительный, что бы уловить суть.
Lader вне форума Ответить с цитированием
Старый 08.12.2011, 22:00   #2
Napkin
Пользователь
 
Аватар для Napkin
 
Регистрация: 09.12.2009
Сообщений: 25
По умолчанию

а что мешает для грида сделать view model?
Код:
public class Contract
{
public string ContractName{get;set}
public string PurchaserName{get;set;}
public double Summ{get;set;}
}

public IEnumerable<Contract> GetContractModels()
{
using (DataClasses1DataContext db = new DataClasses1DataContext())
        {
            var result = (from dogovor in db.Dogovor
                          join pokupatel in db.Pokupatel on dogovor.id == pokupatel.id_dog
                          select new Contract{
ContractName = dogovor.name_dog,
PurchaserName = pokupatel.Name,
Summ = pokupatel.sum
}).AsEnumerable();
return result;      
        }
}
>> Конечно можно переменную result кинуть напрямую в грид, но тогда его шапка будет иметь названия name_dog, Name и sum

Насколько я помню, DataGridView нормально настраивается, и Вы сами можете обзывать колонки и все остальное как захотите
ЗЫ return result конечно же в юзинге не надо делать.. всего лишь набросок
Удел сильных - уделывать слабых
Napkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
datagridview ttwork Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 4 06.01.2012 06:28
C# DataGridView Sanuch89 Помощь студентам 2 04.08.2011 12:52
DataGridView bondik Общие вопросы .NET 2 13.05.2009 19:42