0

ユーザーが削除ボタンをクリックしたときにデータグリッドビューから行を削除したい.データグリッドビューはデータテーブル_dtにバインドされているため、_dtから行を削除し、変更された_dtをデータグリッドビューに再バインドしようとしますが、行を削除する代わりに、ここで何が間違っているのですか

    private void btnDelete_Click(object sender, EventArgs e)
    {
        if (dataGridView1 != null && dataGridView1.SelectedRows.Count == 1)
        {
            string key = dataGridView1.SelectedRows[0].Cells["ID"].Value.ToString();
            DataColumn[] keyColumns = new DataColumn[1];
            keyColumns[0] = _dt.Columns["ID"];
            _dt.PrimaryKey = keyColumns;
            rowToDelete = _dt.Rows.Find(key);
            _dt.Rows.Remove(rowToDelete);
            _dt.AcceptChanges();
            SqlCommandBuilder cb = new SqlCommandBuilder(_sqlDa);
            _sqlDa.Fill(_dt);
            _sqlDa.Update(_dt);
            dataGridView1.DataSource = null;
            dataGridView1.DataSource = _dt;
        }
    }
4

2 に答える 2

2

更新前に入力する必要はなく、この行も削除します

    _dt.AcceptChanges(); 

これによりメモリから行が削除され、更新を呼び出すと残りの行のみが更新されるため、データベースから行は削除されません。

于 2012-09-14T08:56:56.043 に答える
0

Fill はデータベースからデータを再度取得し、変更が失われるため、Fill Before Update を呼び出す必要はありません。だからこれはあなたのために働くでしょう。

SqlCommandBuilder cb = new SqlCommandBuilder(_sqlDa);
//_sqlDa.Fill(_dt);
_sqlDa.Update(_dt);
于 2012-09-14T08:00:42.893 に答える