无法删除数据网格行并将剩余行保存回数据库
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。
我试图在用户选择一行然后单击 "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。