Я хочу отобразить данные «Столбцы» объекта DataRow в GridView:
public class DataRow
{
public string Row { get; set; }
public ObservableCollection<IDictionary<string, object>> Columns { get; set; }
public DataRow(string row, ExpandoObject columnData)
{
this.Row = row;
this.Columns = new ObservableCollection<IDictionary<string, object>>() { columnData as IDictionary<string,object>};
}
}
Все мои объекты DataRow собраны в ObservableCollection в другом классе:
public class Table
{
public string DataTableName{ get; set; }
public ObservableCollection<DataRow> Data{ get; set; }
}
И все мои таблицы содержатся в ObservableCollection в другом классе:
public class MyTables
{
public ObservableCollection<Table> MyTables{ get; set; }
}
Таким образом, я попытался выполнить привязку следующим образом:
<ItemsControl ItemsSource="{Binding MyTables}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
...
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
...
</Grid.ColumnDefinitions>
<Label ...Text="{Binding DataTableName}"/>
<telerik:RadGridView
...
AutoGenerateColumns="True"
ItemsSource="{Binding Data.Columns}"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Я не понимаю, почему я не могу связать свой ItemsSource из GridView с Data.Columns- ObservableCollection.
Сообщение об ошибке:
Ошибка пути BindingExpression: свойство 'Columns' не найдено в 'object' '' ObservableCollection`1 '(HashCode = 61300126)'. BindingExpression: Path = Data.Columns; DataItem = «Таблица» (HashCode = 50904493); целевой элемент - RadGridView (Name = '); Целевым свойством является «ItemsSource» (тип «Object»)
Помимо отображения данных, таблица должна поддерживать копирование / вставку из Excel и редактирование значений. Поскольку я заранее не знаю, сколько нужно строк и столбцов, я использую динамический объект ExpandoObject, в который я могу добавлять свойства во время выполнения, которые являются моими столбцами в сетке данных.