Добавление данных в динамический DataGrid в WPF - PullRequest
0 голосов
/ 20 марта 2012

Хорошо, я почесал голову над этим лучшую часть дня, Google мало чем помог, мои коллеги по проекту тоже не смогли решить его, и у нас меньше дня от нашего срока. Помогите нам Obi-One Stackoverflow, вы наша единственная надежда:

У меня есть DataGrid, который состоит из переменного числа столбцов переменных типов (DataGridTextColumn, DataGridComboBoxColumn, DataGridCheckBoxColumn)

и мне нужно привязать к ним данные.

Каждый из этих столбцов будет представлять запрос к базе данных, который является причиной того, что сетка должна быть очень гибкой. Мне нужна помощь в том, как связать и добавить данные в эти столбцы в части кода.

EDIT Кажется, я забыл прояснить это: некоторые столбцы будут содержать данные одного типа (в нашем случае: «Оценка»). В зависимости от подтипа этого объекта нам понадобится другой тип столбца. Таким образом, таблица будет иметь n столбцов, некоторые из которых должны быть связаны с данными одного типа.

КОНЕЦ РЕДАКТИРОВАНИЯ

Я не могу спроектировать контейнер-класс, который имеет одно свойство для каждого столбца, так как они динамически изменяются. Из того, что я прочитал, я не могу связать столбцы с различными индексами массива, и последняя подходящая идея, которую я имел, состояла в том, чтобы свяжите различные столбцы со строкой, представляющей тип данных («флажок», «строка», «комбинированный список»), а затем просто добавьте контейнер, у которого есть свойство с таким именем, для каждого отдельного столбца. Я не мог найти способ сделать это, так как, кажется, нет метода «Добавить» для вызова столбцов сетки! Подводя итог в коде желаемого мышления, мне нужно что-то вроде этого:

//Create an arbitrary number of columns
for(int i = 0; i < NR_CHECKBOXES; ++i) {
    DataGridCheckBoxColumn col = new DataGridCheckBoxColumn();
    col.Header = titles[i];
    //which are bound to a container with correct type of data
    col.Binding = new Binding("checkboxes[" + i + "]");
    grid.Columns.Add(col);
}

grid.Add(checkboxes); //and then populate the grid

или как-то так:

//Create an arbitrary number of columns
for(int i = 0; i < NR_CHECKBOXES; ++i) {
    DataGridCheckBoxColumn col = new DataGridCheckBoxColumn();
    col.Header = titles[i];
    col.Binding = new Binding("Data");
    col.Add(checkboxes[i]); //Populate the column specifically
    grid.Columns.Add(col);
}

где чекбоксы - это список объектов, у которых есть свойство «Данные» (извините, не удалось кодифицировать этот встроенный элемент, нажав клавишу табуляции, а затем $, возможно, так как я на шведской клавиатуре). Затем эти циклы будут скопированы для каждого типа столбца и данных, которые у меня есть (ComboBoxes и TextBoxes).

Надеюсь, этого достаточно, чтобы объяснить мою проблему, и что кто-то там знает, как этого добиться в WPF.

Ответы [ 2 ]

0 голосов
/ 20 марта 2012

Хорошо, я вижу, ваш набор результатов очень динамичный.Можете ли вы получить то, что вы хотите, создав DataTemplate во время выполнения?

Создание DataTemplate во время выполнения

0 голосов
/ 20 марта 2012

Используйте табличку с данными. Приведите каждый запрос к определенному типу и укажите таблицу данных для этого типа. Вы можете добавить все свойства XAML, которые вы когда-либо хотели для этого типа. WPF выберет правильный шаблон в зависимости от типа.

DataTemplates

...