2012-03-26 15 views
0

Ich habe zwei Liste der verschiedenen Objekte:Merge und binden zwei Listen an ein Gridview

List<Report> 
List<Newsletter> 

jeweils eine ‚Erstellungsdatum‘ Eigenschaft. Ich muss das Erstellungsdatum beider Listen in absteigender Reihenfolge sortieren und an eine Gridview binden.

Wie kann das gemacht werden, da ich nur eine Datenquelle bereitstellen kann?

Antwort

3

Sie könnten zunächst List der Daten erstellen:

var rows = reports.Select(x => x.CreateDate).Union(news.Select(x => x.CreateDate)).OrderByDescending(x => x.Date).ToList(); 

Und dann verwenden, um eine DataTable Struktur für die Bindung:

DataTable dt = new DataTable(); 
dt.Columns.Add("Date"); 

foreach (var row in rows) { 
    dt.Rows.Add(row); 
} 
grid.DataSource = dt; 
+0

Hier verschmutzen, werde ich nur die Datums- und Uhrzeitwerte gebunden an die Grid-Ansicht zu bekommen. Ich muss einen Namen, ein Datum und den Status an das Gitter binden. Wie kann ich die 3 Eigenschaften mit einem Lambda-Ausdruck auswählen? – NewBie

+0

Sie können anonyme Objekte anstelle nur des Datums – ionden

+0

auswählen. Anonymes Objekt hat den Job erledigt. Vielen Dank. – NewBie

0

Wenn beide Typen die gleichen Eigenschaften haben Sie anzeigen möchten, dann könnten Sie erstellen eine Schnittstelle, die sie beide implementieren. Dann kann Ihre Ansicht Folgendes haben.

Pseudo-Code:

List<IDisplayReportsAndNewsletter> data = new List<IDisplayReportsAndNewsletter>(); 

data.Addrange(reports); 

data.Addrange(newsletters); 

grid.Datasource = data.OrderBy(d => d.CreatedDate).ToList(); 

wo Berichte und Newsletter, die Listen sind Sie beschreiben oben, wo die Klassen nun Ihren neuen IDisplayReportsAndNewsletter-Schnittstelle implementieren.

Der Hauptvorteil, den Sie daraus gegenüber der Dataset-Option ziehen (was ebenfalls gilt), besteht darin, dass Sie weiterhin mit Ihren Domänenobjekten in der Ansicht arbeiten können, anstatt in und aus Datasetzeilen zu übersetzen.

Der Nachteil ist, dass Sie Ihre Domain-Objekte mit einer Schnittstelle nur für den Zweck Ihrer Ansicht