无法删除数据网格行并将剩余行保存回数据库

Cannot delete a datagrid row and save the remaining rows back in database

我试图在用户选择一行然后单击 "Delete" 按钮时从 datagridview 中删除一行。我正在使用以下代码:

        private void btnDel_Click(object sender, EventArgs e)
        {
            dgvSearchResults.ReadOnly = 假;
            如果 (MessageBox.Show("Are you sure?", "confirmation", MessageBoxButtons.YesNo) == DialogResult.Yes) {
                dgvSearchResults.Rows.RemoveAt(dgvSearchResults.SelectedRows[0].Index);
                ole_da.Update(dTable);
            }
        }

调试时出现以下错误:

{"Update requires a valid DeleteCommand when passed DataRow collection with deleted rows."}

我是 C# 的新手,不知道如何创建 DeleteCommand 或使用 CommandBuilder(如某些 SO 帖子中所建议的那样)来解决此问题。

在您的点击事件中执行此操作:

ole_da.SelectCommand = yourSelectCommand;             
OleDbCommandBuilder oleDbCommandBuilder = new OleDbCommandBuilder(ole_da);
ole_da.Update(dTable); 

感谢@Orkun-Bekar,下面终于解决了问题:

private void btnDel_Click(object sender, EventArgs e)
        {
            dgvSearchResults.ReadOnly = false;
            if (MessageBox.Show("Delete?", "confirmation", MessageBoxButtons.YesNo) == DialogResult.Yes) {
                dgvSearchResults.Rows.RemoveAt(dgvSearchResults.SelectedRows[0].Index);

                ole_da.SelectCommand = new OleDbCommand("SELECT * FROM Projects");
                ole_da.SelectCommand.Connection = conn;
                oleCmdBuilder = new OleDbCommandBuilder(ole_da);
                ole_da.Update(dTable);

            }
        }

其中,ole_da 收到了一个 select 命令,该命令 select 包含相关 table 中的所有项目。然后给它一个连接,即 conn。然后,使用 OleDbCommandBuilder class 将自动删除 selected 行,无需指定明确的 DeleteCommand。