2

所以我让这个datagridview1在数据集(db1)中填充了一个数据表(索引1),我试图通过按钮删除当前选择的行。

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 异常:

lname.Text = db1.gettable(1).Rows[dataGridView1.CurrentRow.Index][2].ToString();

我猜当行被删除时,选择会更改并触发 dataGridView1_SelectionChanged-Event。

有什么办法可以解决吗?

4

1 回答 1

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(); 
    }
} 
于 2012-05-13T11:15:57.483 回答