为什么我会收到此错误(索引超出范围。必须是非负数且小于集合的大小。)
代码:
object value = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex ].Value;
object minus = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex + 1].Value;
object delte = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex + 2].Value;
if (value is DBNull || minus is DBNull || delte is DBNull) { return; }
else if (value.Equals("+"))
{
produseTableAdapter.PlusCantitate(DateTime.Now, dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex -5].Value.ToString());
FillData();
dataGridView1.Rows[e.RowIndex].Selected = true;
}
else if (minus.Equals("-"))
{
produseTableAdapter.MinusCantitate(DateTime.Now, dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex - 5].Value.ToString());
FillData();
dataGridView1.Rows[e.RowIndex].Selected = true;
}
else if (delte.Equals("Delete"))
{
if (MessageBox.Show("Really ?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
{
produseTableAdapter.DeleteQuery(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex - 5].Value.ToString());
FillData();
dataGridView1.Rows[e.RowIndex].Selected = true;
}
else { return; }
}
问题在于细胞[e.ColumnIndex + 1]&&单元格[e.ColumnIndex + 2]。 对象值的下一个单元格是另一个按钮,然后是另一个按钮。我怎样才能得到这个按钮的索引?
答案 0 :(得分:2)
当你删除最后一行并将Selected Row设置为之前删除的行时,它可能与Delete按钮有关。
答案 1 :(得分:2)
因为你试图访问一个不存在的行。
produseTableAdapter.PlusCantitate(DateTime.Now, dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex -5].Value.ToString());
FillData();
dataGridView1.Rows[e.RowIndex].Selected = true;
例如,如果网格中有4行,则在第一行中,您将从数据库和第二行删除记录,您正在重新加载网格数据。所以现在它没有第4排。但是你仍然试着在第4行进行一些操作。在你的第3行。
将第3行更改为此
if(e.RowIndex>0)
{
int newIndex=e.RowIndex-1;
dataGridView1.Rows[newIndex].Selected = true;
}
答案 2 :(得分:1)
您的一行[]或单元格[]引用必须超出实际数据的范围。确保行和列索引(尤其是在减去或添加常量的情况下)在数据范围内。