2017-09-12 2 views
0

Hallo ich möchte Daten aus der Datenbank in Gridview abrufen. Ich verwende Benutzerdefinierte Grid Hier ist die C# -CodeZeilen können in Gridview nicht programmatisch hinzugefügt werden. Index Fehler

try 
{ 
    int i=0; 
    MySqlCommand cmd = new MySqlCommand("select accounts,credit,debit,sum(credit) as c,sum(debit) as d from tbl_open_balance", con); 
    dr=cmd.ExecuteReader(); 
    while(dr.Read()) 
    { 
     dataGridView1.Rows[i].Cells[0].Value=dr["accounts"].ToString(); 
     dataGridView1.Rows[i].Cells[1].Value = dr["credit"].ToString(); 
     dataGridView1.Rows[i].Cells[2].Value = dr["debit"].ToString(); 
     dataGridView1.Rows.Add(); 
     i++; 
    } 
    dataGridView1.BorderStyle = BorderStyle.None; 
    dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(238,239,249); 
    dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.SingleHorizontal; 
    dataGridView1.DefaultCellStyle.SelectionBackColor = Color.DarkTurquoise; 
    dataGridView1.DefaultCellStyle.SelectionForeColor = Color.WhiteSmoke; 
    dataGridView1.BackgroundColor = Color.White; 

    dataGridView1.EnableHeadersVisualStyles = false; 
    dataGridView1.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.None; 
    dataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.FromArgb(20, 25, 72); 
    dataGridView1.ColumnHeadersDefaultCellStyle.ForeColor = Color.White; 
    dr.Close(); 

} 
catch (Exception ex) 
{ 
    dr.Close(); 
} 

ich den Fehler erhielt Index außerhalb des zulässigen Bereichs war. Muss nicht negativ und kleiner als die Größe der Sammlung sein. Parametername: Index

+0

Wahrscheinlich weil 'int i = 1 '- Indizes in der Programmierung beginnen, von 0. Aber besser ist immer noch für jeden Datensatz in dem' rd' eine neue Zeile hinzufügen, und nicht eine bevölkern. Was, wenn DB jetzt mehr Aufzeichnungen zurückgibt? ... Dann wieder Ausnahme –

+0

Ich versuchte, aber ich erhielt den gleichen Fehler –

+0

haben Sie versucht, dataGridView1.Rows.Add() zu verschieben; als erste Aussage in while-Schleife ... – Khan

Antwort

0

Ich unterstütze Khans Vorschlag. Versuchen Sie, eine Zeile aus dem Datenreader in einem String-Array abzufangen, und fügen Sie diese Zeile mit Datagridview.Rows.Add (myArray); zum Gitter. Sie überlassen es also dem Raster, die Werte der nächsten Zeile zu übernehmen und zuzuweisen.

0

Ich finde die Antwort. Ich möchte überprüfen, ob die Zeile zuerst erstellt wird, wenn die Zeile nicht erstellt wird. Hier ist der Code

try 
     { 
      int i=0; 
      double credit=0.00, debit=0.00; 
      MySqlCommand cmd = new MySqlCommand("select accounts,credit,debit from tbl_open_balance where status='A'", con); 
      dr=cmd.ExecuteReader(); 
      while(dr.Read()) 
      { 
       if (dataGridView1.Rows.Count < i + 1) dataGridView1.Rows.Add(); 
       dataGridView1.Rows[i].Cells[0].Value=dr["accounts"].ToString(); 
       dataGridView1.Rows[i].Cells[1].Value = dr["credit"].ToString(); 
       credit = credit + Convert.ToDouble(dr["credit"].ToString()); 
       dataGridView1.Rows[i].Cells[2].Value = dr["debit"].ToString(); 
       debit = debit + Convert.ToDouble(dr["debit"].ToString()); 
       dataGridView1.Rows.Add(); 
       i++; 
      } 
      dataGridView1.Rows[i].Cells[0].Value = "Credit"; 
      dataGridView1.Rows[i].Cells[1].Value = ""; 
      dataGridView1.Rows[i].Cells[2].Value = credit.ToString(); 
      dataGridView1.Rows.Add(); 
      i++; 
      dataGridView1.Rows[i].Cells[0].Value = "Debit"; 
      dataGridView1.Rows[i].Cells[1].Value = ""; 
      dataGridView1.Rows[i].Cells[2].Value = debit.ToString(); 
      dataGridView1.Rows.Add(); 
      i++; 
      dataGridView1.Rows[i].Cells[0].Value = "Total"; 
      dataGridView1.Rows[i].Cells[1].Value = ""; 
      dataGridView1.Rows[i].Cells[2].Value = (credit - debit).ToString(); 
      dataGridView1.Rows.Add(); 
      dataGridView1.BorderStyle = BorderStyle.None; 
      dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(238,239,249); 
      dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.SingleHorizontal; 
      dataGridView1.DefaultCellStyle.SelectionBackColor = Color.DarkTurquoise; 
      dataGridView1.DefaultCellStyle.SelectionForeColor = Color.WhiteSmoke; 
      dataGridView1.BackgroundColor = Color.White; 

      dataGridView1.EnableHeadersVisualStyles = false; 
      dataGridView1.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.None; 
      dataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.FromArgb(20, 25, 72); 
      dataGridView1.ColumnHeadersDefaultCellStyle.ForeColor = Color.White; 
      dr.Close(); 

     } 
     catch (Exception ex) 
     { 
      dr.Close(); 
     } 
Verwandte Themen