Laden...

DataGridViewCheckboxColums: Der Index lag außerhalb des Bereichs.

Erstellt von nieselfriem vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.723 Views
N
nieselfriem Themenstarter:in
44 Beiträge seit 2004
vor 8 Jahren
DataGridViewCheckboxColums: Der Index lag außerhalb des Bereichs.

Hallo!

Ich versuche eine Select Feld in eine Tabelle zu integrieren. Dazu habe ich das DataGridview mit den Spalten Auswahl, MaterialId, Name, Preis ausgestattet. Weiterhin befülle ich dieses DataGridview mit einer Datenbank Select:

 String queryMat = "SELECT Material.materialID AS MaterialID, Material.Name AS Name, Material.Preis AS Preis from material ORDER BY NAME";

Das übergebe ich an die untere Methode, die dann eine Datatable zurück liefert


public DataTable loadMatImpTable(String query)
        {
            myConn.Open();
            SQLiteCommand cmd = new SQLiteCommand(query, myConn);
            SQLiteDataAdapter sda = new SQLiteDataAdapter();
            sda.SelectCommand = cmd;
            DataTable dt= new DataTable();
            sda.Fill(dt);
            return dt;

        }

Das DataGridview befülle ic dann wie folgt:


DataTable dt = lt.loadMatImpTable(queryMat);
 this.matDataGridVW.Rows.Clear();
foreach (DataRow item in dt.Rows)
{
                int n = matDataGridVW.Rows.Add();
                matDataGridVW.Rows[n].Cells[0].Value = false;
                matDataGridVW.Rows[n].Cells[1].Value = item["MaterialID"].ToString();
                matDataGridVW.Rows[n].Cells[2].Value = item["Name"].ToString();
                matDataGridVW.Rows[n].Cells[3].Value = item["Preis"].ToString();

}

Nun zu Problem. Ich möchte die Auswahl nun wie folgt bearbeiten:


private void matDataGridVW_MouseClick(object sender, MouseEventArgs e)
        {
            if ((bool)matDataGridVW.SelectedRows[0].Cells[0].Value == false) //Fehler
            {
                matDataGridVW.SelectedRows[0].Cells[0].Value = true;
            }
            else
            {
                matDataGridVW.SelectedRows[0].Cells[0].Value = false;
            }
        }

Da kommt es zum Fehler in der If-Abfrage. Wieso ist der Index negativ? Die Datenbankanfrage funktioniert und die Tabelle wird richtig angezeigt. Sobald ich aber versuche eine Auswahl auszüfhren bekomme ich die Excepltion.

VG niesel

16.840 Beiträge seit 2008
vor 8 Jahren

Der Index ist "negativ" weil entweder Row oder Column nicht existiert.
Siehe [Artikel] Debugger: Wie verwende ich den von Visual Studio?

N
nieselfriem Themenstarter:in
44 Beiträge seit 2004
vor 8 Jahren

Das ich Debuggen sollte und den Debugger nutzen muss ist mir schon klar. Aber ich wollte nur ein kleinen Tipp woran es liegen kann, dass der index nicht stimmen soll.

Egal, Ich habe den Fehler gefunden. Ich musste in den Eigenschaften des DataGridview den Selectionmode auf FullRowSelect stellen.

vg niesel

D
985 Beiträge seit 2014
vor 8 Jahren

Wenn du den Debugger benutzt hättest, hättest du auch festgestellt, dass die Collection leer ist.

Das kann dir theoretisch immer noch passieren, denn ein Klick auf ein DataGridView impliziert nicht zwangsläufig, dass es ausgewählte Elemente gibt.

Ein Blick in die Doku DataGridView.SelectedRows hätte dir auch verraten, wann du dort Einträge erwarten kannst.

Weiterhin verrät dir diese Doku, dass es sich bei der Eigenschaft SelectedRows um einen Snapshot handelt. Das wiederum bedeutet, dass man sich diesen Snapshot merken sollte um damit weiter zu arbeiten.