删除数据表中的行 - > DeletedRowInaccessible

时间:2012-05-13 09:48:14

标签: c# database winforms exception ado.net

所以我在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。

有什么方法可以解决这个问题吗?

1 个答案:

答案 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(); 
    }
}