当用户选择一行然后单击“删除”按钮时,我试图从datagridview中删除一行。我使用以下代码:
private void btnDel_Click(object sender, EventArgs e) { dgvSearchResults.ReadOnly = false; if (MessageBox.Show("Are you sure?", "confirmation", MessageBoxButtons.YesNo) == DialogResult.Yes) { dgvSearchResults.Rows.RemoveAt(dgvSearchResults.SelectedRows[0].Index); ole_da.Update(dTable); } }
调试时出现以下错误:
{“在传递带有已删除行的DataRow集合时,更新需要有效的DeleteCommand。”}
我对C#很陌生,不知道如何创建DeleteCommand或使用CommandBuilder(如某些SO帖子中所建议的)来解决这个问题。
答案 0 :(得分:1)
在点击事件中执行以下操作:
ole_da.SelectCommand = yourSelectCommand;
OleDbCommandBuilder oleDbCommandBuilder = new OleDbCommandBuilder(ole_da);
ole_da.Update(dTable);
答案 1 :(得分:0)
感谢@ 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命令,用于从所讨论的表中选择所有项目。然后给它一个连接,即 conn 。然后使用OleDbCommandBuilder类将自动删除所选行,而无需指定显式的DeleteCommand。