2012-03-27 54 views
0

我有不同的类型如何将GridView与两个不同的列表绑定?

List<Report> 
List<Newsletter> 

是否有绑定两个列表一个GridView方式的两份名单?这两个类都不是从一个通用接口实现的。

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

+0

你的意思是属性的名称.. – 2012-03-27 08:49:17

+0

你昨天被问及如何使它们成为1个列表。您可以将只读gridview绑定到该列表。 – 2012-03-27 08:49:49

+0

不,名称是我的对象内的属性。它是字符串类型,状态是enum – NewBie 2012-03-27 08:50:17

回答

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

我认为那就是“更清洁”,然后是我的版本,因为您可以将LINQ与匿名类型一起使用,而不需要创建额外的类。 – ChrFin 2012-03-27 08:56:02

0

您可以使用CAST()方法将工会清单

grv.DataSource = l1.Cast<object>().Union(l2.Cast<object>()); 
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 
0

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

你可以看到L2O如何加入可以做到in this link
很好的例子,如何绑定结果数据GridView控件 - 你可以看到例如in this article

相关问题