2013-12-24 16 views
0

У меня есть случай, когда в столбцах Datagrid не фиксированы. то есть он должен генерироваться в зависимости от некоторых условий.Динамический столбец datagrid в wpf

Как сохранить значения в БД и отобразить с ними паттерн данных с использованием шаблона MVVM.

P.S: У меня есть основная сетка и подсетевая сетка, и в зависимости от значения, которое он выбирает в основной сетке, мне нужно сформировать нижнюю сетку. Я также забочусь о его хранении в БД, поскольку может быть 5 столбцов или иногда 20.

Любые подобные ссылки или ссылки также будут полезны.

ответ

2

Это может быть полностью выполнено с помощью MVVM-совместимого способа, но не обязательно тривиально для новичков и не подходит для простых приложений.

Один подход, который я хотел бы использовать, состоит в том, чтобы сохранить коллекцию дескрипторов столбцов, сериализованных в базе данных . Дескрипторы столбцов - это просто мои собственные custom DTO data classes и содержат свойства, связанные с столбцом, то есть ширину, тип столбца, независимо от того, видна ли она видимость, ее ординал и т. Д. Все это делается с использованием простых структур и/или примитивов. Чистые типы, но конкретно не имеют каких-либо типов данных, связанных с пользовательским интерфейсом, в нем вообще .

Этот список ColumnDescriptors может быть serialiased to and from XML и храниться в базе данных либо в nvarchar, либо в XML column. Особенно на SQL Server столбец XML лучше, поскольку вы можете запросить глубину в структурах XML, хранящихся в столбце базы данных.

Как и в случае с макетом пользовательского интерфейса, перед представлением запрашивать правильный набор дескрипторов столбцов из базы данных, я затем накачиваю эту коллекцию с помощью static GridColumnFactory class, который выполняет итерацию объектов дескриптора и создает мне соответствующие столбцы сетки и присваивает им соответствующие значения. Когда фабрика вернет эту коллекцию, представление затем добавит их в коллекцию колонок DataGrid.

Преимущества такого подхода:

  • Если я поменять на DataGrid, который используется (т.е. поменять местами от одного поставщика к другому, скажем, DevExpress к ComponentOne или native WPF), я могу просто изменить типы столбцы, возвращенные с заводского класса

  • Если я меняю что-либо в пользовательском интерфейсе, мне не нужно прикасаться к дескрипторам столбцов, которые хранятся.

  • Serialising и из XML означает, что если я добавить/удалить свойства из дескрипторов, то старые сохраненные копии могут все еще быть размещены, они немедленно не сломаны момент я выпустить обновление

  • Один из лучшие возможности всего, что я могу изменить сохраненные расположения столбцов с помощью простого оператора SQL, мне не нужно также выпускать скомпилированный код

  • Последнее: использование дескрипторов столбцов делает тривиальным реализовать указанный пользователем макет, т.е.когда вы отпускаете их перетаскивать столбцы вокруг, а затем хотите сохранить макет в следующий раз

  • Если я хочу, чтобы получить действительно обалденный, дескрипторы столбцов могут быть возвращены из WebService

Для на веб-сайте они также могут храниться в свободном XML-файле, который затем считывается и хранится в кеше.

При таком подходе вы должны всегда избегать использования специализированных или поставщика конкретных типов данных, так как они не обязательно сериализации хорошо (если вообще), и станут слабым местом в будущем - это будет быть наиболее вероятными вещами, которые вы должны изменить, и если эти изменения нарушат любые сохраненные дескрипторы, которые у вас уже есть.

+0

Можете ли вы, пожалуйста, направить меня на образец приложения, пожалуйста. – staticshockdracoon

+0

@staticshockdracoon Нет, AFAIK нет никаких примеров проектов для этого - это образец/методология, которую я разработал сам и использовал в приложениях WPF, ASP.NET и Silverlight. Вы знаете, что шаблон хорош, когда вы можете использовать его в таких технологиях. – slugster

Смежные вопросы