【问题标题】:How to bind a gridview with two different lists?如何将gridview与两个不同的列表绑定?
【发布时间】:2012-03-27 08:45:44
【问题描述】:

我有两个不同类型的列表

List<Report>
List<Newsletter>

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

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

【问题讨论】:

  • 你的意思是属性的名称..
  • 您昨天询问了如何将它们放入 1 个列表中。您可以将只读网格视图绑定到该列表。
  • 不,名称是我的对象中的一个属性。它是字符串类型,Status 是一个枚举
  • @Henk,我有不同类型的要求。昨天,我只需要以纯文本格式获取数据。现在我必须将它绑定到网格。
  • 您要编辑数据吗?您希望如何/在哪里保存更改?

标签: c# asp.net gridview


【解决方案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();

【讨论】:

  • 我认为这比我的版本更“干净”,因为您可以将 LINQ 与匿名类型一起使用,而无需创建额外的类。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    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
    

    【讨论】:

      【解决方案4】:

      在这种情况下,我会使用 Linq-To-Objects 在两个集合之间加入,并仅选择我想绑定到 GridView 的属性(导致匿名集合)。 那么这个匿名集合就可以作为GridView的数据源了。

      您可以看到有关如何完成 L2O 连接的绝佳示例in this link
      如何将结果数据绑定到 GridView - 可以看例子in this article

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-13
        • 1970-01-01
        • 2012-10-10
        • 2015-06-08
        • 2014-07-29
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        相关资源
        最近更新 更多