Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 从datagridview删除行_C# 4.0 - Fatal编程技术网

C# 4.0 从datagridview删除行

C# 4.0 从datagridview删除行,c#-4.0,C# 4.0,当用户单击delete按钮时,我想从datagridview中删除行。datagridview绑定到datatable _dt,因此我从_dt中删除该行,并尝试将修改后的_dt重新绑定到datagridview,但不是删除该行,而是将其添加到datagridview的最后一行。我在这里做错了什么 private void btnDelete_Click(object sender, EventArgs e) { if (dataGridView1 != null

当用户单击delete按钮时,我想从datagridview中删除行。datagridview绑定到datatable _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;
        }
    }

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

SqlCommandBuilder cb = new SqlCommandBuilder(_sqlDa);
//_sqlDa.Fill(_dt);
_sqlDa.Update(_dt);

更新前无需填写,同时删除此行

    _dt.AcceptChanges(); 
因为这将在调用update时从内存中删除该行
只更新剩余的行,它不会从数据库中删除该行。

不需要在那里调用Fill方法。或者,如果您想在更新后使用。