我有一个包含GridView的用户控件。我将IEnumerable数据源对象传递给用户控件实例。如何使用ForEach循环后面的用户控件代码中的数据源来显示我想要的数据源列?
到目前为止,我在用户控件的代码中有以下代码:
public IEnumerable<object> DataSource { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
this.GridView1.DataSource = DataSource;
foreach (var item in DataSource)
{
//The line below gives an error - what's the correct way to do this?
this.GridView1.Columns.Add(new BoundColumn() {DataField = "What to put here", HeaderText = "What to put here"; }
}
this.GridView1.DataBind();
}
答案 0 :(得分:2)
您不应该循环数据源的所有项目,而是要在所有记录上垂直循环,而您希望在所有列上仅水平循环一次。由于您知道DataSource中包含的对象的属性列表,因此您可以静态地执行此操作,甚至不在foreach中。如果你真的想要它是动态的那么你可以在IEnumerable中可用的第一个对象的所有公共字段上使用Reflection和循环。
编辑:通过反射查找对象的所有公共字段,请参阅此处:
How can I find all the public fields of an object in C#?
但这只适用于你想要使它成为通用的,如果你已经知道你的对象包含一些字段,如姓名,地址和电子邮件,例如,你不需要它。