2011-09-19 52 views
0

我有一个包含GridView的用户控件。我将一个IEnumerable数据源对象传递给用户控件实例。我如何使用ForEach循环遍历用户控制代码中的数据源以显示我想要从数据源获得的列?ASP.NET GridView用户控件问题

到目前为止,我在代码下面的代码在用户控件的背后:

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(); 
} 

回答

2

你应该对数据源的所有项目不循环,你的所有记录垂直循环,而要只在所有列上水平地循环一次。由于您知道DataSource中包含的对象的属性列表,因此您可以静态执行此操作,甚至不需要使用foreach。如果你真的想让它动态化,那么你可以使用Reflection并循环IEnumerable中第一个对象的所有公共字段。

编辑:找到通过反射对象的所有公共字段在这里看到:

How can I find all the public fields of an object in C#?

,但如果你想使它通用这只适用,如果你已经知道你的对象包含例如,名称,地址和电子邮件等一些字段,您不需要它。

+0

感谢您的回复。我想我需要一个代码示例,因为我不明白。 – Theomax

+0

目前我不想让它变得通用。我想知道如何从数据源对象中指定在gridview中使用哪些列。 – Theomax

+0

所以请编辑你的问题,显示IEnumerable中对象的属性。为什么是IEnumerable 而不是IEnumerable ?? –