2016-04-12 9 views
0

C#, Net 4, VS2010Bind mehrere Arrays auf einem Datagridview

Ich habe ein Objekt, das mehrere Reihen von Doppel enthält (hergestellt sie kürzlich in Listen). Es sieht so etwas wie:

public class Channel 
{ 
    public List<DateTime> Date = new List<DateTime>(); //DateTime 
    public List<double> Val1 = new List<double>();  // 
    public List<double> Val2 = new List<double>();  // 
    public List<double> Val3 = new List<double>();  // 
    public List<double> Val4 = new List<double>();  // 
} 

So, jetzt ich versuche, ein DataGridView mit einem DataSource zu füllen, aber ich kümmern sich nur um Date, Val1 und Val2. Wie kann ich das erreichen?

Derzeit bin ich Schleifen durch die Arrays und fügen sie Zeile für Zeile in die DataGridView. Aber das ist wirklich langsam, da ich eine riesige Datenmenge habe, mit der ich arbeiten kann. Ist es nicht einfach, meine Arrays zu binden und das Gitter zu füllen? Ich kann es nicht herausfinden.

Dank

-Code Ich habe versucht:

Channel ch = new Channel(); 

List<object> datasource = new List<object>(); 

dataGridView1.Rows.Clear(); 
dataGridView1.Columns.Clear(); 

datasource.Add(ch.spotsList[0].Date); 
datasource.Add(ch.spotsList[0].Val1); 
datasource.Add(ch.spotsList[0].Val2); 

dataGridView1.DataSource = datasource; 

-Code Ich verwende das funktioniert, aber ist wirklich langsam:

for (int i = 0; i < ch.spotsList[0].Date.Count; i++) 
{ 
    dataGridView1.Rows.Add(ch.spotsList[0].Date[i].ToString("yyyy-MM-dd HH:mm:ss"), ch.spotsList[0].Val1[i].ToString("#.##"), ch.spotsList[0].Val2[i].ToString("#.##")); 
} 
+0

Fyi gibt es einen Unterschied zwischen einer Liste und einem Array. Wie auch immer, eine einfache Google-Suche auf, wie man Liste zu einem Datagridview bindet das ist eine sehr einfache Aufgabe btw .. und es gibt viele vorhandene Beispiele auf 'Stackoverflow sowie der Rest des Internets '- Beispiel http: // stackoverflow. com/questions/6473326/using-a-list-als-eine-daten-source-for-datagridview – MethodMan

+0

Richtig, sie waren Arrays und ich machte sie Listen, um dynamisch zu sein. Ich habe Beispiele gegooglet, aber es funktioniert nur für eine einzelne Liste. Ich kann anscheinend keine Möglichkeit finden, mehrere Listen an eine Datagridview zu binden (eine für jede Spalte). – Baddack

+0

vielleicht sollten Sie alle relevanten Code zeigen, wo Sie versucht haben, die Datagridview an eine Liste zu binden MethodMan

Antwort

2

DataGridViews sind nicht wirklich für Datenmodelle entwickelt strukturiert nach Spalte (wie Ihre). Sie sollen vielmehr mit Modellen verwendet werden, die eine Reihe darstellen. Es scheint, als ob deine Bearbeitung anzeigt, dass du anfängst, in diese Richtung zu denken. Insbesondere hoffentlich Ihr neues Datenmodell ist so etwas wie

public class Channel 
{ 
    private _listings = new List<SpotsList>(); 

    public IList<SpotsList> SpotsList { get { return _listings; } } 
} 

public class SpotsList 
{ 
    public DateTime Date { get; set; } 
    public double Val1 { get; set; } 
    public double Val2 { get; set; } 
    public double Val3 { get; set; } 
    public double Val4 { get; set; } 
} 

In diesem Fall sollten Sie in der Lage sein, dies über den Aufruf in Ihre DataGridView

Channel ch = new Channel(); 
// Add data to the channel 
dataGridView1.DataSource = ch.SpotsList; 

bearbeiten

zu laden versuche und übermittele klarer, worüber ich nachdenke, der folgende Code soll dir helfen, deinen Ansatz zu meinem Ansatz zu kartieren.

public class DataPoint 
{ 
    public DateTime Date { get; set; } 
    public double Val1 { get; set; } 
    public double Val2 { get; set; } 
} 

// ... your other code ... 

var dataSource = new List<DataPoint>(); 
for (int i = 0; i < ch.spotsList[0].Date.Count; i++) 
{ 
    dataSource.Add(new DataPoint() 
    { 
    Date = ch.spotsList[0].Date[i], 
    Val1 = ch.spotsList[0].Val1[i], 
    Val2 = ch.spotsList[0].Val2[i] 
    }); 
} 
dataGridView1.DataSource = dataSource; 
+0

Danke für die Antwort, ich denke du hast Recht. Ich denke, das Problem ist, jede meiner SpotList hat N Anzahl von Datetime, Val1, Val2 usw. Ich denke, der Ansatz für eine Datenquelle möglicherweise nicht durchführbar. Ich muss vielleicht einfach bei meiner for-Schleife bleiben. Danke – Baddack

+0

Ich habe gerade versucht, darüber nachzudenken wie Mcharts. In ms-Diagrammen kann ich meine x- und y-Werte für jede Serie angeben, was ich hier versuche. Ich habe 3 Werte, die eine datetime teilen, also versuche ich, alle meine Werte an diese Datagrid-Ansicht zu binden. Ich spiele mit Datasets und Datatables, um zu sehen, ob es einen Weg gibt, aber habe es noch nicht herausgefunden. – Baddack

+0

Ich verstehe, wo dein Verstand ist. Im Gegensatz zu MsCharts funktionieren 'DataGridViews' besser mit Listen von Punkten {x, y, z} als mit einzelnen Listen von x-, y- und z-Werten. Hoffentlich hilft mir meine Bearbeitung meiner Antwort, diesen Ansatz weiter zu inspirieren. – erdomke