2016-03-26 5 views
0

Ich versuche, Daten manuell zu einem DataGridView hinzuzufügen (eine Rasteransicht der Anwesenheit eines Schülers für das Jahr anzuzeigen). Das Problem ist, wenn ich eine Datenzeile zur DataGridView hinzufüge, anstatt eine neue Zeile zu erstellen und die Daten hinzuzufügen. Eine neue leere Zeile wird erstellt und die Daten werden der obersten Zeile hinzugefügt. Hier ist der relevante Code:Beim Hinzufügen einer Zeile zu DataGridView wird eine neue leere Zeile hinzugefügt und am Ende der aktuellen Zeile werden Daten hinzugefügt.

foreach (IndividualAttendanceRecord rec in DatabaseInterfacer.GetRecords("pi404")) 
{ 
    if (dataGrid.ColumnCount < rec.Attendance.Count) 
     dataGrid.ColumnCount = rec.Attendance.Count; 

    List<String> row = new List<string>(); 
    foreach (string entry in rec.Attendance) 
     row.Add(entry); 

    string[] rowArray = row.ToArray<string>(); 
    dataGrid.Rows.Add(rowArray); 
} 

diesen Code Doing macht einen Datagridview mit allen Daten in einer Zeile, dann zwei Leerzeilen am unteren Ende.

Irgendwelche Hilfe?

EDIT: Noch völlig ratlos auf diesem. Ich habe meinen Code vereinfacht und der foreach-Anweisung einige Testzeilen hinzugefügt, und ich verstehe nicht, warum er so ausgegeben wird, wie er ist. Hier ist mein neuer Code:

foreach (IndividualAttendanceRecord rec in DatabaseInterfacer.GetRecords("pi404")) 
     { 
      if (dataGrid.ColumnCount < rec.Attendance.Count) 
       dataGrid.ColumnCount = rec.Attendance.Count; 

      string[] row = rec.Attendance.ToArray<string>(); 
      dataGrid.Rows.Add(row); 

      dataGrid.Rows.Add("1", "2", "3"); 
      dataGrid.Rows.Add("One", "Two", "Three"); 
     } 

Und hier ist, was es gibt: http://i.imgur.com/f45mlod.png

Ich sehe nicht, warum es immer noch alle Daten in der IndividualAttendanceRecord in einer einzigen Zeile setzen auf seine eigene, und Erstellen Sie dann eine Leerzeile und setzen Sie die "1 2 3" und "eins zwei drei".

Kann jemand sehen, warum das passiert? Ich bin wahrscheinlich sehr dumm.

Antwort

0

Ich schaute durch den Rest meines Codes und fand das Problem. Es gab kein Problem mit dem Display-Code, das Problem lag tatsächlich in der Datenbank. Aus irgendeinem Grund befanden sich alle Daten tatsächlich in einer Zeile der Datenbank mit zwei Leerzeilen darunter.

1

Die Steuerung zeigt, was Sie zu zeigen, sagte:

Zuerst sagte man zu Raster einige Spalten zu erstellen, indem ColumnCount auf die Anzahl der Elemente Ihrer Liste setzen:

dataGrid.ColumnCount = rec.Attendance.Count; 

Sie dann hinzufügen Reihe, die einige Werte unter Verwendung Add(params object[] values) Methode enthält. wenn Sie ein Array an die Methode übergeben, wird es eine Reihe fügt und diese Werte als Spalten verwenden:

string[] rowArray = row.ToArray<string>(); 
dataGrid.Rows.Add(rowArray); 

Wenn Sie alle Werte in einer einzigen Spalte hinzugefügt wollen, als Option können Sie:

dataGrid.ColumnCount = 1; 
foreach (string entry in rec.Attendance) 
    dataGrid.Rows.Add(entry); 
+0

Ich bin mir nicht sicher, ob ich verstehe, die Art, wie ich den Code durchgelesen habe ist so: Für jeden Datensatz in meiner Datenbank, überprüfe ich, ob es in das Raster derzeit passt. Wenn nicht, dann erweitere ich das Raster. Dann mache ich eine Liste und füge eine Reihe von Daten aus dem Datensatz hinzu. Ich konvertiere dann diese Liste in ein Array und füge dieses Array als neue Zeile hinzu. Daher, wenn ich drei IndividualAttendanceRecords in meiner Datenbank habe, sollte es drei Zeilen geben (eine für jeden Datensatz). Und tatsächlich gibt es drei Zeilen, aber es gibt dreimal so viele Spalten, wie es sein sollte und alle Daten sind in einer Zeile. – Omegastick

Verwandte Themen