如何将网格视图与两个不同的列表绑定
本文关键字:两个 绑定 列表 网格 视图 | 更新日期: 2023-09-27 18:29:17
我有两个不同类型的列表
List<Report>
List<Newsletter>
有没有一种方法可以将网格视图与两个列表绑定?这两个类都不是从公共接口实现的。
我只需要在对象属性中显示name
和status
。我的意思是,我想绑定的属性类型对这两个列表都是通用的。
也许是这样的:
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();
您可以使用Cast()方法,然后联合列表
grv.DataSource = l1.Cast<object>().Union(l2.Cast<object>());
不是直接的,但您可以创建某种中间类:
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
在这种情况下,我会使用Linq-To对象在两个集合之间连接,并只选择我想绑定到GridView的属性(导致匿名集合)。然后这个匿名集合可以用作GridView的数据源。
你可以在这个链接中看到L2O连接的好例子
如何将结果数据绑定到GridView-您可以在本文中看到