我有这段代码:
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();
}
我想从DataGridView
获取值,并在我的ToolStrip文本框和组合框中查看它们,但是当我点击除column6或column7之外的其他一些列时,我收到此错误。谁能帮我理解我错过了什么?感谢
指数超出范围。必须是非负数且小于集合的大小。
答案 0 :(得分:0)
此异常表示您尝试按索引访问项目集合,并且索引无效。然后你会得到这个错误。
因此建议您在访问之前检查Columns
是否有有效的索引。
答案 1 :(得分: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;
从零开始索引,如在sql语句中提到的那样,你只有8列从0到7开始。所以dataGridView1.Columns [8] .ReadOnly = true;将上升例外“指数超出范围”。
答案 2 :(得分:0)
根据您的SQL语句,您将列调用错误。我认为应该遵循代码,因为数组从索引0
开始而索引8
将抛出outOfRangeException
,因为数组的长度仅为0 - 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;
在下面你应该使用Numar,Validat和Contat不同的索引,否则你会有错误的值:
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();