如何以表格形式/数据网格显示分层数据
Posted
技术标签:
【中文标题】如何以表格形式/数据网格显示分层数据【英文标题】:How to display hierarchical data in a tabular form/datagrid 【发布时间】:2012-10-13 17:07:14 【问题描述】:我想显示一个网格,其中显示受邀者信息和 - 这是棘手的部分 - 指示他们收到了哪些邮件的列。
例如,像这样的网格:
Firstname | Lastname | ReceivedMail1 | ReceivedMail2
如果在应用程序中创建了第三封邮件,我需要在网格中添加这样的列:
Firstname | Lastname | ReceivedMail1 | ReceivedMail2 | ReceivedMail3
我的数据库是关系型的,所以有一些类似 person.receivedEmails 的电子邮件集合。
我正在寻找解决此问题的最佳做法。我在 WinForms 应用程序中使用 C# 工作,但我的 web 应用程序也需要它。我正在考虑一个动态对象(尽管我不确定它在网格上的效果如何),或者可能是一个数据库视图。有什么建议吗?
【问题讨论】:
现在考虑这个:link 【参考方案1】:好的,这就是我要做的。 感谢Adding-properties-To-ExpandoObjects 和Binding-ExpandoObjects-ToDatagrid
这是一个原型:
dynamic obj = new ExpandoObject();
obj.FirsName = "John";
obj.LastName = "Doe";
var x = obj as IDictionary<string, Object>;
for (int i = 0; i < 3; i++)
x["ReceivedMail_" + i] = true;
var data = new List<ExpandoObject>() obj ;
this.dataGridView1.DataSource = data.ToDataTable();
使用第二个链接中的方法:
public static class DynamicIENumerableExtension
public static DataTable ToDataTable(this IEnumerable<dynamic> items)
var data = items.ToArray();
if (data.Count() == 0) return null;
var dt = new DataTable();
foreach (var key in ((IDictionary<string, object>)data[0]).Keys)
dt.Columns.Add(key);
foreach (var d in data)
dt.Rows.Add(((IDictionary<string, object>)d).Values.ToArray());
return dt;
结果和我想要的完全一样。 :)
【讨论】:
以上是关于如何以表格形式/数据网格显示分层数据的主要内容,如果未能解决你的问题,请参考以下文章
串口屏开发之数据记录控件的使用总结——如何以表格形式记录和显示告警数据
串口屏开发之数据记录控件的使用总结——如何以表格形式记录和显示告警数据