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.


Anmelden zum Antworten