2

だから私は、データセット(db1)のデータテーブル(インデックス1)で満たされたこのdatagridview1を持っており、ボタンを介して現在選択されている行を削除しようとしています。

private void delempl_Click(object sender, EventArgs e){
    db1.gettable(1).Rows[dataGridView1.CurrentRow.Index].Delete()
    db1.updatedb(); //sending the changes to my DB
}

また、ユーザーがデータグリッドビューでの選択を変更するたびに、姓/名を 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 がトリガーされると思います。

それを修正する方法はありますか?

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 に答える