2013-03-04 2 views
6

Как я могу исправить эту ошибку:Как исправить Index Out Of Range ошибки

Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

В этом коде:

dataGridView1.AllowUserToAddRows = false; 
dataGridView1.Columns.Add("ID", "ID"); 
dataGridView1.Columns.Add("Firstname", "Firstname"); 
dataGridView1.Columns.Add("MI", "MI"); 
dataGridView1.Columns.Add("Lastname", "Lastname"); 
dataGridView1.Columns.Add("Username", "Username"); 
dataGridView1.Columns.Add("Rights", "Rights"); 
c.Open(); 
OleDbCommand cmd = new OleDbCommand(); 
cmd.Connection = c; 
cmd.CommandText = "SELECT * From Account"; 
OleDbDataReader reader = cmd.ExecuteReader(); 
while (reader.Read()) 
{ 
    dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells["ID"].Value = reader[0].ToString(); 
    dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells["Firstname"].Value = reader[1].ToString(); 
    dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells["MI"].Value = reader[2].ToString(); 
    dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells["Lastname"].Value = reader[3].ToString(); 
    dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells["Username"].Value = reader[7].ToString(); 
    dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells["Rights"].Value  = reader[9].ToString(); 
} 
c.Close(); 
+1

Какова структура таблицы счета? –

+0

Какая строка выдает ошибку? Каковы текущие состояния объектов в этой строке? – David

+1

Почему бы не использовать dataBind? – Pyromancer

ответ

5

Вы пытаетесь отобразить данные из базы данных в datagridview? Почему бы не использовать databind?

Смотрите мой пример кода:

string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=the directory or the path of your database"; 
string query = "SELECT * From Table Name"; 
using (OleDbConnection conn = new OleDbConnection(connStr)) 
{ 
    using (OleDbDataAdapter adapter = new OleDbDataAdapter(query, conn)) 
    { 
     DataSet ds = new DataSet(); 
     adapter.Fill(ds); 
     dataGridView1.DataSource = ds.Tables[0]; 
    } 
    conn.Close(); 
} 
+0

@AlfredSanz - что вы имеете в виду? ds - это 'DataSet' – lexter

2

Коллекция Ряды имеет метод «Добавить», который принимает массив объектов. Это, безусловно, более простой и более простой подход, что пример кода в вашем вопросе:

http://msdn.microsoft.com/en-us/library/fbs04kbx.aspx