首页 文章

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

提问于
浏览
0

我想在用户选择行然后单击“删除”按钮时从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

    在您的点击事件中这样做:

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

    感谢@ 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 .

相关问题