我有不同的類型如何將GridView與兩個不同的列表綁定?
List<Report>
List<Newsletter>
是否有綁定兩個列表一個GridView方式的兩份名單?這兩個類都不是從一個通用接口實現的。
我只需要在對象屬性中顯示name
和status
。我的意思是,我想要綁定的屬性類型對於這兩個列表都是通用的。
我有不同的類型如何將GridView與兩個不同的列表綁定?
List<Report>
List<Newsletter>
是否有綁定兩個列表一個GridView方式的兩份名單?這兩個類都不是從一個通用接口實現的。
我只需要在對象屬性中顯示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();
我認爲那就是「更清潔」,然後是我的版本,因爲您可以將LINQ與匿名類型一起使用,而不需要創建額外的類。 – ChrFin 2012-03-27 08:56:02
您可以使用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到對象在兩個集合之間進行連接,並只選擇我想綁定到GridView的屬性(導致匿名集合)。 然後,這個匿名集合可以用作GridView的數據源。
你可以看到L2O如何加入可以做到in this link
很好的例子,如何綁定結果數據GridView控件 - 你可以看到例如in this article
你的意思是屬性的名稱.. – 2012-03-27 08:49:17
你昨天被問及如何使它們成爲1個列表。您可以將只讀gridview綁定到該列表。 – 2012-03-27 08:49:49
不,名稱是我的對象內的屬性。它是字符串類型,狀態是enum – NewBie 2012-03-27 08:50:17