在DataGridView中对数据进行删除(真、假删除法),并更新到sql数据库

在上位机winform端DataGridView控件中对数据进行删除,并更新到数据库

首先介绍一下两种删除方式,真删除和假删除,先介绍假删除,后边是真删除
真删除:
真删除指的是把数据库中的数据真正的删除掉了,不会重新显示,再需要该数据,应该重新添加,用的是delete语句
假删除
并不是真正的把数据库中的数据删除了,只是在想删除的数据列设置一个标志位IsDeleted,假设该标志位默认情况下为0,想删除某一行数据的时候,将该标志位置1,用的是update语句
这样在数据库中还有该数据,但是上位机DataGridView中便不再显示,具体过程如下:

  • 这是数据库中的数据信息,
    在设计表的时候加一列int类型的IsDeleted,并设置默认情况下为0.
    在这里插入图片描述
    在这里插入图片描述
  • 在上位机加载DataGridView控件中的信息的时候,用的sql语句如下:
    注意加一句 where s.IsDeleted=0 这样就会显示默认IsDeleted=0时的是所有数据行
    下图是在上位机的sql语句以及在SQL执行查询语句的检验,显示的查询结果
    在这里插入图片描述
    在这里插入图片描述
  • 这是上位机界面的显示信息
    如何显示 第一列和最后两列是在datagridview中添加Link列和Checkbox列,具体参考上一篇博文
    https://blog.csdn.net/qq_39217004/article/details/105364814

在这里插入图片描述

下面介绍如何在代码中实现,假删除的步骤以及思路

  1. 设置控件datagridview的CellContentClick注册事件,点击单元格中内容,触发该事件
  2. 在CellContentClick事件中添加代码
  3. 首先获取当前点击的单元格的行列索引(第几行第几列,确定选中的数据)
  4. 若点击的是第n行最后一列删除键,则执行方法
  5. 先获取鼠标点击的行数据,利用datagridview转datarow
  6. 写sql语句在数据库中将所选定的行数据的标志位设置为1
  7. datagridview中刷新一下,把刚刚选中的datarow移除掉

选择一个要删除的对象,点击删除,再点击确定,提示删除成功,界面上的信息也随之消失
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
打开数据库观看结果,
点击执行,可以看到在界面上选定的行的isDeleted标志位已经变为1
9ibG9nLmNzZG4ubmV0L3FxXzM5MjE3MDA0,size_16,color_FFFFFF,t_70)
再次启动程序页面,会发现,删除的“王凤”的信息已经不显示在页面上了
在这里插入图片描述

private void dgvStudents_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex != -1)  //鼠标点击的位置在  列标题位置下的数据,才触发
    {
        //1 获取我当前点击的单元格的行列数索引
        //2 判断是否选择的是link列,并且判断是 删除还是修改
        DataGridViewCell cell = dgvStudents.Rows[e.RowIndex].Cells[e.ColumnIndex];//1      
        if (cell is DataGridViewLinkCell && cell.FormattedValue.ToString() == "删除")
        {
            //删除操作
            DialogResult drResult = MessageBox.Show("你确定要删除该学生的信息吗?", "删除学生信息提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (drResult == DialogResult.Yes)
            {
                //获取行数据
                //dgvStudents.Rows[e.RowIndex]是数据表中鼠标点击的行索引   DataRow表示表中的一行数据
                //(xxx).Row才获取到了所选中的行列索引所绑定的对象
                //DataGridViewRow转换为DataRow
                DataRow dr = (dgvStudents.Rows[e.RowIndex].DataBoundItem as DataRowView).Row;
                int stuId = int.Parse(dr["stuId"].ToString());//将stuId字符串型转化为整型
                                                              //假删除 IsDeleted
                string sqlDel0 = "update StudentInfo set IsDeleted=1 where StuId=@stuId";
                SqlParameter para = new SqlParameter("@StuId", stuId);
                int count = SqlHelper.ExecuteNonQuery(sqlDel0, para);
                if (count > 0)
                {
                    MessageBox.Show("该学生信息删除成功", "删除学生信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    //DataGridView中的数据并没有刷新,需要手动刷新一下
                    DataTable dtStudents = (DataTable)dgvStudents.DataSource;//获取到数据源
                    dtStudents.Rows.Remove(dr);//将获取到的行列索引所绑定的对象移出
                    dgvStudents.DataSource = dtStudents;//重新指定数据源
                }
                else
                {
                    MessageBox.Show("该学生信息删除失败", "删除学生信息提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }         
          }
        }
    }

下面介绍真删除
在假删除的基础上,只需要稍微改动一下sql语句
改动一:
string sqlDel0 = “delete StudentInfo where StuId=@stuId”;
改动二:
加载datagridview的时候,把sql语句改为
在这里插入图片描述
下面查看调试结果:
在控件中选中一个删除的数据,点击:删除,界面上信息消失。
在sql中发现学生表中的“王凤”的信息也被彻底删除了,达到预期效果了
在这里插入图片描述
在这里插入图片描述

至此,功能已经全部完成

发布了18 篇原创文章 · 获赞 0 · 访问量 233

猜你喜欢

转载自blog.csdn.net/qq_39217004/article/details/105366769
今日推荐