所以我在datagridview1中填充了数据集(db1)中的数据表(索引1),并尝试通过Button删除当前选定的行。
private void delempl_Click(object sender, EventArgs e){
db1.gettable(1).Rows[dataGridView1.CurrentRow.Index].Delete()
db1.updatedb(); //sending the changes to my DB
}
每当用户更改datagridview中的选择时,我也会将第一个/最后一个名称写入2个文本框中
private void dataGridView1_SelectionChanged(){
lname.Text = db1.gettable(1).Rows[dataGridView1.CurrentRow.Index][2].ToString();
fname.Text = db1.gettable(1).Rows[dataGridView1.CurrentRow.Index][1].ToString();
}
删除最后一行工作正常,但当我尝试删除中间的一行时,我得到一个DeletedRowInaccessible Exception:
lname.Text = db1.gettable(1).Rows[dataGridView1.CurrentRow.Index][2].ToString();
我想当行被删除的那一刻,选择会改变并触发dataGridView1_SelectionChanged-Event。
有什么方法可以解决这个问题吗?
答案 0 :(得分:4)
数据表中仍然存在已删除的行,但您无法读取其属性 您应该检查CurrentRow是否被删除
private void dataGridView1_SelectionChanged()
{
DataTable tb = db1.gettable(1);
if(dataGridView1.CurrentRow != null && dataGridView1.CurrentRow.Index != -1 &&
tb[dataGridView1.CurrentRow.Index].RowState != DataRowState.Deleted)
{
lname.Text = tb.Rows[dataGridView1.CurrentRow.Index][2].ToString();
fname.Text = tb.Rows[dataGridView1.CurrentRow.Index][1].ToString();
}
}