Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Nik Legaloff Blog. Биндим грид коллекцией своих обьектов.

Биндим грид коллекцией своих обьектов.


Давно отказался я в вебе от датасетов. Да вот засада, когда биндишь тот же ArrayList коллекцией обьектов своего типа, дизайнер никак не подсказывает имена пропертей. Вчера пришла в голову идея, чуть позже появилась её первая реализация.
Идея состояла в том, что бы подсовывать гриду в качестве датасорса свой компонент. А в нём можно в дизайн-тайме подсовывать гриду подготовленный датасет, а в рантайме данные можно брать у делегированного метода(заодно и красиво выносится в отдельный метод выборка данных для грида).

Итак.
Есть у нас к примеру класс Employee, а точней MyApp.Domain.Employee
Находится он к примеру в сборке "MyAppDomain"

Дизайн-тайм. Дизайнер выбирает данные из компонента по интерфейсу IListSource, а точней по его методу IList GetList()
Для него мы создадим датасет и туда добавим табличку с именем "MyApp.Domain.Employee"
После загружаем сборку MyAppDomain и находим там тип MyApp.Domain.Employee
Пробежимся по нему рефлектором и добавим в DataTable колонки с именем property.Name и типом property.PropertyType

всё, теперь можно в GetList возвращать dataSet.DefaultViewManager

Ран-тайм.
Ну а тут наш компонент возвращает данные через IEnumerable, который он и реализует. Использующий нас класс должен реализовать ивент
public event IListHandler GetEnumerableData; который вернёт нам IEnumerable коллекцию.
её то мы и вернём
public IEnumerator GetEnumerator()
{
return GetEnumerableData().GetEnumerator();
}

Ну вот собссно и всё.
Исходники здесь

ЗЫ. Небольшая поправка. На самом деле надо переименовать делегат IListHandler в IEnumerableSourceHandler. Так будет правильней, просто в первоначальном варианте я немного иначе извлекал данные для грида в ран-тайм.

Nik Legaloff

09 August 2005 13:20  Комментарии (7)

 
Наш Киев

Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта