如何将gridview与两个不同的列表绑定?

时间:2012-03-27 08:45:45

标签: c# asp.net gridview

我有两个不同类型的列表

List<Report>
List<Newsletter>

有没有办法将gridview与两个列表绑定?这两个类都不是通过公共接口实现的。

我只需要在对象属性中显示namestatus。我的意思是,我想要绑定的属性的类型对于两个列表都是通用的。

4 个答案:

答案 0 :(得分:1)

也许是这样的:

<强> ASPX

<asp:GridView ID="gv" runat="server">
    <Columns>
        <asp:BoundField DataField="name" HeaderText="Name" />
        <asp:BoundField DataField="status" HeaderText="Status" />
    </Columns>
</asp:GridView>

<强> CS

gv.DataSource=reportList
              .Select(x =>  new {x.Status,Name= x.text })
              .Concat(
              newsList
              .Select(x =>  new {Status=x.Status.ToString(),Name= x.text }) );
gv.DataBind();

答案 1 :(得分:0)

您可以使用Cast()方法然后联合列表

grv.DataSource = l1.Cast<object>().Union(l2.Cast<object>());

答案 2 :(得分:0)

不是直接的,但你可以创建某种中间类:

public class ReporterNewsletterMixer
{
    public Reporter Reporter { get; set; }
    public Newsletter Newsletter { get; set; }

    public string Name
    {
        get
        {
            if(Reporter == null)
                return Newsletter.Name;
            return Reporter.Name;
        }
    }
    //same for status

    public ReporterNewsletterMixer(Reporter reporter) { Reporter = reporter; }
    public ReporterNewsletterMixer(Newsletter news) { Newsletter = news; }
}

然后你可以将两个列表混合在一起:

List<ReporterNewsletterMixer> mixed = new List<ReporterNewsletterMixer>();
reporters.Foreach(r => mixed.Add(new ReporterNewsletterMixer(r));
newsletter.Foreach(n => mixed.Add(new ReporterNewsletterMixer(n));
//bind to mixed

答案 3 :(得分:0)

在这种情况下,我会使用Linq-To-Objects在两个集合之间进行连接,并仅选择我想要绑定到GridView的属性(导致匿名集合)。 然后,这个匿名集合可以用作GridView的数据源。

你可以看到关于如何完成L2O加入的很好的例子in this link
如何将结果数据绑定到GridView - 您可以看到示例in this article