Jak dynamicznie generować kolumny w WPF DataGrid?
Próbuję wyświetlić wyniki zapytania w datagrid WPF. Typ ItemsSource, do którego jestem związany, jestIEnumerable<dynamic>
. Ponieważ zwracane pola nie są określane do czasu wykonania, nie znam typu danych, dopóki zapytanie nie zostanie ocenione. Każdy „wiersz” jest zwracany jakoExpandoObject
z właściwościami dynamicznymi reprezentującymi pola.
Miałem taką nadziejęAutoGenerateColumns
(jak poniżej) będzie w stanie wygenerować kolumny zExpandoObject
tak jak w przypadku typu statycznego, ale nie wydaje się.
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Results}"/>
Czy mimo to należy to zrobić deklaratywnie, czy też muszę wciągnąć imperatywnie niektóre C #?
EDYTOWAĆ
Ok, otrzymasz prawidłowe kolumny:
// ExpandoObject implements IDictionary<string,object>
IEnumerable<IDictionary<string, object>> rows = dataGrid1.ItemsSource.OfType<IDictionary<string, object>>();
IEnumerable<string> columns = rows.SelectMany(d => d.Keys).Distinct(StringComparer.OrdinalIgnoreCase);
foreach (string s in columns)
dataGrid1.Columns.Add(new DataGridTextColumn { Header = s });
Wystarczy teraz dowiedzieć się, jak powiązać kolumny z wartościami IDictionary.