【问题标题】:Delete selected rows from data grid view and database从数据网格视图和数据库中删除选定的行
【发布时间】:2021-03-27 19:25:02
【问题描述】:

在我的 WinForms 应用程序中,我需要同时从数据网格视图和数据库中删除选定的行并保存数据库。

我有这个下面的代码,现在它只从 datagridview 中删除,而不是从数据库中删除,请指导我哪里错了。

private void button1_Click(object sender, EventArgs e)
{
    try
    {
        String msg = "Confirm Delete?";
        String caption = "Delete Record";
        MessageBoxButtons buttons = MessageBoxButtons.YesNo;
        MessageBoxIcon ico = MessageBoxIcon.Question;
        DialogResult result;
        result = MessageBox.Show(this, msg, caption, buttons, ico);
        if (result == DialogResult.Yes)
        {
            foreach (DataGridViewRow item in this.iP_SpoolsDataGridView.SelectedRows)
            {
                using (SqlConnection con = new SqlConnection(cs))
                {
                    SqlCommand cmd = con.CreateCommand();
                    int id = Convert.ToInt32(iP_SpoolsDataGridView.SelectedRows[0].Cells[0].Value);
                    cmd.CommandText = "Delete from Lot_Numbers where ID='" + id + "'";

                    iP_SpoolsDataGridView.Rows.RemoveAt(this.iP_SpoolsDataGridView.SelectedRows[0].Index);
                    con.Open();
                    cmd.ExecuteNonQuery();

                }

            }
        }
        else
        {
            return;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Deleting Failed:" + ex.Message.ToString(), "Delete",
            MessageBoxButtons.OK, MessageBoxIcon.Error);
    }

【问题讨论】:

  • 它抛出异常?如果是,什么样的例外?

标签: c# sql-server visual-studio winforms


【解决方案1】:

试试这个:

private void button1_Click(object sender, EventArgs e)
{
    try
    {
        String msg = "Confirm Delete?";
        String caption = "Delete Record";
        MessageBoxButtons buttons = MessageBoxButtons.YesNo;
        MessageBoxIcon ico = MessageBoxIcon.Question;
        DialogResult result;
        result = MessageBox.Show(this, msg, caption, buttons, ico);
        if (result == DialogResult.Yes)
        {
            int id = 0;
            foreach (DataGridViewRow item in this.iP_SpoolsDataGridView.SelectedRows)
            {
                id = Convert.ToInt32(item.Cells[0].Value.ToString());
                if (Database_Remove_LotNumberById(id))
                {
                    iP_SpoolsDataGridView.Rows.RemoveAt(item.Index);
                }
            }
        }
        else
        {
            return;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Deleting Failed:" + ex.Message.ToString(), "Delete",
            MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}


//The code become clean if you separate the Database Operations
private bool Database_Remove_LotNumberById(int IdLotNumber)
{
    bool IsRemovedFromDatabase = false;
    try
    {
        using (SqlConnection con = new SqlConnection(cs))
        {
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandText = "Delete from Lot_Numbers where ID= @ID";
            cmd.Parameters.AddWithValue("@ID", IdLotNumber);
            con.Open();
            cmd.ExecuteNonQuery();
            IsRemovedFromDatabase = true;
        }
    }
    catch (SqlException ex)
    {
        // Handle the SQL Exception as you wish
        MessageBox.Show("Deleting Failed:" + ex.Message.ToString(), "Delete", MessageBoxButtons.OK, MessageBoxIcon.Error);
        //or throw 
    }
    return IsRemovedFromDatabase;
}

【讨论】:

  • 为了获得高质量的答案,除了提供代码之外,请说明您所做的更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多