Как динамически добавлять столбцы сетки данных на основе привязки? - PullRequest
2 голосов
/ 04 мая 2011

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

       1 | 2 | 3 | 4
Foo    0   5   1   3
Bar    1   1   0   3
Foo2   3   9   7   6
Bar2   9   8   6   5

Это будет означать, что в первый день (любого месяца) было 9 из Bar2. У меня уже есть все данные отсортированы и готовы к работе. Тем не менее, я не могу найти хороший способ динамически добавлять дни месяца в виде столбцов. Я добавил, как сделать это, используя привязку, потому что все данные находятся в моей модели представления, и я не собираюсь добавлять столбцы с использованием кода (за исключением случаев, когда это абсолютно необходимо, конечно).

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

Я также рассмотрю вопрос о принятии ответа, предлагающего альтернативу использованию сетки данных.

Ответы [ 2 ]

4 голосов
/ 05 мая 2011

Для данных в стиле отчета, которые вы хотите сгенерировать на лету, DataTable хорошо работает с DataGrid.Например, с этим XAML:

<Grid>
    <DataGrid ItemsSource="{Binding}"/>
</Grid>

и этим кодом:

var table = new DataTable();
table.Columns.Add(new DataColumn("Name"));
table.Columns.AddRange(Enumerable.Range(1, 4).Select(i => new DataColumn(i.ToString())).ToArray());
DataRow row = table.NewRow();
row[0] = "Foo";
row[1] = 0;
row[2] = 5;
row[3] = 1;
row[4] = 3;
table.Rows.Add(row);
DataContext = table;

мы получаем этот результат:

enter image description here

2 голосов
/ 05 мая 2011

эта проблема напоминает мне это

Я думаю, вы можете использовать тот же подход ICustomTypeDescriptor, чтобы обеспечить желаемые столбцы / свойства

с другой стороны ... если это просто неубедительный отчет, решение Рика Слэдки выглядит как "меньше кода" => проще и быстрее реализовать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...