【问题标题】:ASP.NET GridView user control problemASP.NET GridView 用户控件问题
【发布时间】:2011-11-20 08:19:27
【问题描述】:

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

【问题讨论】:

    标签: c# asp.net user-controls


    【解决方案1】:

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

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

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

    但这仅适用于您希望使其通用的情况,如果您已经知道您的对象包含一些字段,例如名称、地址和电子邮件,例如,您不需要它。

    【讨论】:

    • 感谢您的回复。我想我需要一个代码示例,因为我不明白。
    • 目前我不想让它通用。我想知道如何从数据源对象中指定在gridview中使用哪些列。
    • 所以请编辑您的问题,显示您的 IEnumerable 中对象的属性。为什么那是 IEnumerable 而不是 IEnumerable ??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多