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

时间:2015-02-16 13:28:47

标签: c# datagridview

当用户选择一行然后单击“删除”按钮时,我试图从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帖子中所建议的)来解决这个问题。

2 个答案:

答案 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。