Хорошо, я почесал голову над этим лучшую часть дня, 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.