我想显示一个显示被邀请者信息的网格 - 这是一个棘手的部分 - 列表明他们收到了哪些邮件。
例如,这样的网格:
Firstname | Lastname | ReceivedMail1 | ReceivedMail2
如果在应用程序中创建了第三个邮件,我的网格需要添加如下列:
Firstname | Lastname | ReceivedMail1 | ReceivedMail2 | ReceivedMail3
我的数据库是关系型的,因此有些人喜欢带有电子邮件集合的person.receivedEmails。
我正在寻找最佳实践来解决这个问题。我在WinForms应用程序中使用C#,但我的webapp也需要这个。我正在考虑一个动态对象(虽然我不确定它对网格有多好),或者可能是数据库视图。有什么建议吗?
答案 0 :(得分:0)
好的,这就是我要去做的事情。 感谢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;
}
结果完全像我想要的那样。 :)