我有一个对象列表,每个对象都包含用户定义的属性。这些属性的键和值是自由字符串,因此它们在对象之间不一定一致。无论如何,我想在表格中显示我的所有对象。
每行一个对象,每列一个属性键,每个单元格一个属性值,如下所示:
名字 | 年龄 | 最喜欢的水果 | 最喜欢的颜色 | 城市 |
---|---|---|---|---|
约翰 | 21 | 蓝色 | 伦敦 | |
简 | 凤梨 | 红色 | 巴黎 | |
保罗 | 22 | 香蕉 | 绿色 | |
帕特里夏 | 23 | 凤梨 | 伊斯坦布尔 |
我有一个自定义对象负责读取属性并将它们存储在字典中
稍后,列需要可按属性值排序和分组(如 Excel 小计)
我什至不知道从哪里开始?自定义数据网格视图?自定义列表视图?
DataTable 对象是获取动态数据的方法。您必须通过执行以下操作来转换它:
public partial class DataGridFromDictionary : Window
{
public DataTable Table { get; set; }
public DataGridFromDictionary()
{
var attributeDictionaries = new List<Dictionary<string, string>>()
{
new Dictionary<string, string>()
{
{"name", "john" },
{"age", "21" },
{"favourite color", "blue" },
{"city", "london" },
}, new Dictionary<string, string>()
{
{"name", "jane" },
{"favourite fruit", "ananas" },
{"favourite color", "red" },
{"city", "paris" },
},
};
Table = CovertToDataTable(attributeDictionaries);
InitializeComponent();
DataContext = this;
}
public DataTable CovertToDataTable(List<Dictionary<string, string>> dynamicObjects)
{
DataTable table = new DataTable();
foreach(var attributeDictionary in dynamicObjects)
{
// add any missing columns
foreach (var attribute in attributeDictionary.Keys)
{
if (!table.Columns.Contains(attribute))
{
table.Columns.Add(attribute);
}
}
// create the new row
var dr = table.NewRow();
foreach (var attribute in attributeDictionary)
{
dr[attribute.Key] = attribute.Value;
}
table.Rows.Add(dr);
}
return table;
}
}
<Grid>
<DataGrid ItemsSource="{Binding Table}" />
</Grid>