@ber_enot
Веб-разработчик, Vue.js / Node.js

Как отобразить несколько полей string и массив из string в виде колонок DataGrid?

Здравствуйте!

Есть класс, в нем несколько полей (например, типа string) и поле массив (или List).
Например, есть 3 поля string и в массиве 2 объекта. Тогда необходимо все это отобразить в Datagrid (wpf), в виде 5 колонок.

Суть в том, что я получаю из БД (MongoDB, хотя сами данные идут с API в виде JSON) несколько стандартных полей, а некоторые поля могут добавляться/удаляться, и я заранее не знаю, сколько их всего. Поэтому затрудняюсь в программе написать класс и привязать его к таблице.
Так же есть возможность изменить структуру БД.
Главное условие - у пользователей должна быть возможность добавлять или удалять свойства объекта, при этом все текущие свойства должны отображаться в таблице.
Думаю, случай не совсем редкий. Как обычно это реализуют?

Сломал себе голову, помогите, пожалуйста! Буду рад любым советам.
Благодарю.
  • Вопрос задан
  • 194 просмотра
Решения вопроса 1
Nipheris
@Nipheris Куратор тега C#
Для стандартных полей сделай стандартные колонки в разметке, в связанной viewmodel-ке сделай свойства, соотв. стандартным полям, сделай для них обыкновенные биндинги.
Для полей, которые могут удаляться/добавляться - генерируй колонки уже после прихода данных и добавляй в датагрид. Во вьюмодели сделай свойство UserProperties типа IDictionary, и заполняй словарь значениями нестандартных полей. При создании "динамических" колонок назначай им привязки вида UserProperties[propertyName], чтобы датагрид лез в этот словарь у каждого элемента и брал оттуда "пользовательские" свойства.
Это идея, если нужно подробнее - непонятные места в комментарии. Случай действительно не редкий, сам недавно писал весьма похожую вещь - данные в монге (из-за отстуствия какой-либо схемы, "пользовательские" свойства), присылаются в JSON-е, нужно было показать в зависимости от того, что пришло.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы