0

当用户单击删除按钮时,我想从 datagridview 中删除行。 datagridview 绑定到数据表 _dt 所以我从 _dt 中删除行并尝试将修改后的 _dt 重新绑定到 datagridview 但不是删除该行而是添加到最后一行datagridview 我在这里做错了什么

    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(); 

因为这将从内存中删除该行,并且当您调用 update 时仅更新剩余的行,它不会从数据库中删除该行。

于 2012-09-14T08:56:56.043 回答
0

无需在更新前调用 Fill,因为 Fill 将再次从 db 获取数据,您的更改将丢失。所以这对你有用。

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