GridView - Zeile zuviel
-
Hallo gleich wieder,
habe auch noch ein Problem mit einem GridView. Ich lasse ihn wie folgt befüllen:int i = 0; dgvInventory.Rows.Add(); while (dr.Read()) { if (dr.IsDBNull(0) == false) { dgvInventory[1, i].Value = dr.GetString(0); dgvInventory[2, i].Value = dr.GetString(1); strLocation = dr.GetString(2) + "-" + dr.GetString(3) + "-" + dr.GetString(4) + "-" + dr.GetString(5); dgvInventory[3, i].Value = strLocation; dgvInventory[5, i].Value = dr.GetString(6); } i++; dgvInventory.Rows.Add(); }
Nur habe ich dann immer zuviele Zeilen ...
Also z.B: 4 Zeilen mit einem Datensatz und zwei weitere Zeilen.
Mach ich ein Rows.Add() zuviel??
Grüße
Roland
-
Kann man durch leichte Gedankenspiele raus bekommen
Angenommen es gibt 2 Reihen im reader (dr ist n blöder name BTW).
1. Du fügst eine Zeile hinzu (1 Zeile leer)
2. die While läuft 2x
2a. beim ersten wird Zeile 1 gefüllt und eine Zeile an gehangen (2 Zeilen, 1 gefüllt, 1 leer)
2b. beim zweiten mal wird Zeile 2 gefüllt und eine Zeile an gehangen (3 Zeilen, 2 gefüllt, 1 leer)Die Schleife ist nun zu Ende und du hast 1 Leerzeile.
das ist aber optimal case, angenommen beim 2a wird die Zeile 1 nicht gefüllt da das if nicht zutrifft, dann wird nichts geschrieben aber eine Leere Zeile an gehangen und i erhöht.
1. Du fügst eine Zeile hinzu (1 Zeile leer)
2. die While läuft 2x
2a. beim ersten wird Zeile 1 nicht gefüllt und eine Zeile an gehangen (2 Zeilen: 1 leer, 2 leer)
2b. beim zweiten mal wird Zeile 2 gefüllt und eine Zeile an gehangen (3 Zeilen: 1 leer, 2 gefüllt, 3 leer)D.h. das hinzufügen der Zeile muss auch im if sein, da es ja nur hinzugefügt werden soll wenn Daten geschrieben werden.
Genauso sollte die Variable i auch nur bei Bedarf inkrementiert werden.
Des weiteren sollte eine Zeile nur angegangen werden sofern auch benötigt.int i = 0; while (dr.Read()) { if (dr.IsDBNull(0) == false) { dgvInventory.Rows.Add(); dgvInventory[1, i].Value = dr.GetString(0); dgvInventory[2, i].Value = dr.GetString(1); strLocation = dr.GetString(2) + "-" + dr.GetString(3) + "-" + dr.GetString(4) + "-" + dr.GetString(5); dgvInventory[3, i].Value = strLocation; dgvInventory[5, i++].Value = dr.GetString(6); } }
BTW, ich weiß gerade nicht wie es bei Forms ist, aber DataGrids setzen oft noch eine Zeile dran worauf der Benutzer Klicken kann um selber Datensätze hinzu fügen zu können.
-
@David B
Super - vielen Dank! Und auch danke für die Erklärung, so verstehe ich das auch!
-
UNd warum machst DU das überhaupt so?
Es gibt z.B. DataSource.