ASP.NET GridView用户控件问题

时间:2011-09-19 15:10:15

标签: c# asp.net user-controls

我有一个包含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();
}

1 个答案:

答案 0 :(得分:2)

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

编辑:通过反射查找对象的所有公共字段,请参阅此处:

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

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