2016-06-06 4 views
-1

Ich habe diesen Code:Fehlermeldung „Index war außerhalb des Bereichs muss nicht negativ sein und kleiner als die Größe der Sammlung.“

string cs = "Data Source=IS020114\\CODRINMA;Initial Catalog=gcOnesti;Integrated Security=True"; 

    string select = "SELECT p.cod AS Numar, p.data AS Data, c.nume AS Furnizor, d.nume AS DocFurnizor, p.doc_cod AS NrDocFurnizor, p.validat AS Validat, p.facturat AS Contat, g.nume AS Gestiune FROM primar p INNER JOIN cf c ON p.part1=c.cf_id INNER JOIN gestiuni g ON p.part2 = g.gest_id INNER JOIN documente d ON p.doc_id = d.doc_id WHERE (p.tip = '2') ORDER BY p.Data"; 

    using (SqlConnection con = new SqlConnection(cs)) 
      { 
       DataGridViewCheckBoxColumn col = new DataGridViewCheckBoxColumn(); 
       col.HeaderText = "Selecteaza"; 
       dataGridView1.Columns.Add(col); 
       col.Width = 65; 
       con.Open(); 
       SqlCommand cmd = new SqlCommand(select, con); 
       SqlDataAdapter sda = new SqlDataAdapter(); 
       sda.SelectCommand = cmd; 
       DataTable dt = new DataTable(); 
       sda.Fill(dt); 
       BindingSource bs = new BindingSource(); 
       bs.DataSource = dt; 
       dataGridView1.DataSource = dt; 
       dataGridView1.ReadOnly = false; 
       dataGridView1.Columns[1].ReadOnly = true; 
       dataGridView1.Columns[2].ReadOnly = true; 
       dataGridView1.Columns[3].ReadOnly = true; 
       dataGridView1.Columns[4].ReadOnly = true; 
       dataGridView1.Columns[5].ReadOnly = true; 
       dataGridView1.Columns[6].ReadOnly = true; 
       dataGridView1.Columns[7].ReadOnly = true; 
       dataGridView1.Columns[8].ReadOnly = true; 
      } 
private void dataGridView1_MouseClick(object sender, MouseEventArgs e) 
    { 
     txtNumar.Text = dataGridView1.SelectedRows[0].Cells[1].Value.ToString(); 
     cmbValidat.Text = dataGridView1.SelectedRows[0].Cells[6].Value.ToString(); 
     cmbContat.Text = dataGridView1.SelectedRows[0].Cells[7].Value.ToString(); 
    } 

Ich möchte die Werte von DataGridView erhalten und sie sehen in meinem ToolStrip Textfeld und Comboboxen, aber wenn ich auf eine andere Spalte außer Spalte6 oder Spalte7 klicke, bekomme ich diesen Fehler. Kann mir jemand helfen zu verstehen, was ich vermisse? Danke

Index war außerhalb des Bereichs. Muss nicht negativ und kleiner als die Größe der Sammlung sein.

+1

Sie müssen die ausgewählten Zeilenindex überprüfen gilt, manchmal seine -1 dies geschieht vor allem, wenn Sie auf den Header – BugFinder

+0

Arrays bei Index starten klicken 0 -> 'dataGridView1.Columns [0] .ReadOnly = true;' Sie haben vergessen und Index 8 ist ungültig –

Antwort

0

Entsprechend Ihrer SQL-Anweisung rufen Sie die Spalten falsch auf. Ich denke, es folgenden Code sein sollte, da Arrays mit dem Index 0 beginnen und Index 8 die outOfRangeException werfen, weil das Array mit einer Länge von nur 8 von 0 hat - 7:

dataGridView1.Columns[0].ReadOnly = true; 
dataGridView1.Columns[1].ReadOnly = true; 
dataGridView1.Columns[2].ReadOnly = true; 
dataGridView1.Columns[3].ReadOnly = true; 
dataGridView1.Columns[4].ReadOnly = true; 
dataGridView1.Columns[5].ReadOnly = true; 
dataGridView1.Columns[6].ReadOnly = true; 
dataGridView1.Columns[7].ReadOnly = true; 

Und weiter unten Sie Numar verwenden sollten , Validat und Contat verschiedene Indizes, da Sie sonst falsche Werte haben:

txtNumar.Text = dataGridView1.SelectedRows[0].Cells[0].Value.ToString(); 
cmbValidat.Text = dataGridView1.SelectedRows[0].Cells[5].Value.ToString(); 
cmbContat.Text = dataGridView1.SelectedRows[0].Cells[6].Value.ToString(); 
+0

@Danke, es hat funktioniert. Ich habe jetzt ein anderes Problem. Nachdem ich dieses Textfeld gefiltert habe und den Wert, nach dem ich gesucht habe, lösche, wird der Index für 'cmbValidat.Text' automatisch auf den letzten Wert gesetzt. Was ist das Problem? – cdrrrrrr

+0

@cdrrrrrr können Sie dies in einer neuen Frage stellen? es ist wirklich schwer ohne Code –

+0

zu sagen. Vielen Dank – cdrrrrrr

0

Diese Ausnahme bedeutet, dass Sie versuchen, auf eine Objektgruppe per Index zuzugreifen, und Ihr Index ist ungültig. Dann erhalten Sie diesen Fehler.

Es wurde daher empfohlen, vor dem Zugriff zu überprüfen, ob Sie einen gültigen Index für Columns haben.

0
dataGridView1.Columns[0].ReadOnly = true; 
dataGridView1.Columns[1].ReadOnly = true; 
dataGridView1.Columns[2].ReadOnly = true; 
dataGridView1.Columns[3].ReadOnly = true; 
dataGridView1.Columns[4].ReadOnly = true; 
dataGridView1.Columns[5].ReadOnly = true; 
dataGridView1.Columns[6].ReadOnly = true; 
dataGridView1.Columns[7].ReadOnly = true; 

Startindex von Null, wie erwähnt in SQL-Anweisung nur 8 Spalten haben, die von 0 bis 7 beginnen, so dataGridView1.Columns [8] .ReadOnly = true; wird die Ausnahme "Index war außerhalb der Reichweite" steigen.

Verwandte Themen