DataGridView移除多行选中数据,同时删除数据库数据

删除DataGridView选中行并更新数据库

DataGridView在与数据库打交道时会经常出现,也很实用。通过DataGridView对数据库进行更改和查询都比较方便。
这里我们需要用DataGridView数据,并通过选中行将数据从数据库中删除。
其原理是把选中记录的主键提取出来,然后传给实体,通过实体给D层传值实现对数据库的修改。

源码:

            DialogResult result = MessageBox.Show("是否要修改当前行中单元格的内容?", "提示信息", MessageBoxButtons.YesNo,        MessageBoxIcon.Question);
            if (this.dataGridView.SelectedRows.Count > 0)
            {
                if (result == DialogResult.Yes)
                {
                    //修改当前行单元格的内容
                    Entity.UserInfo deleteuser = new Entity.UserInfo();
                    for (int i = this.dataGridView.SelectedRows.Count; i > 0; i--)
                    {
                        deleteuser.UserID = Convert.ToInt32(dataGridView.SelectedRows[i - 1].Cells[0].Value);
                        if (deleteuser.UserID == Convert.ToInt32(Entity.StaticUser.UserName))
                        {
                            MessageBox.Show("当前用户已登录,不能删除!", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                            return;
                        }
                        //调用后台方法删除数据库
                        Facade.frmAdmUserFacade facade = new Facade.frmAdmUserFacade();
                        bool resul = facade.DeleteUser(deleteuser);
                        //删除datagridview表中行
this.dataGridView.Rows.RemoveAt(dataGridView.SelectedRows[i - 1].Index);
                    }
                    MessageBox.Show("删除成功!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Question);
                }
            }
            else
            {
                MessageBox.Show("未选中单元格", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                return;
            }

问题

这样很好用,就是一点不方便,这么写只能在绑定数据源的前提下删除datagridview,当我们把List集合的值赋给datagridview显示再用以上代码删除就会报如下错误

这里写图片描述

所以,这个时候代码就得改写了:
在List中删除数据,后重新绑定控件,
因为还要求删除数据库中数据,所以,直接获取选中行的第一列id,删除数据库中数据,然后调用combobox重新获取数据库中信息即可成功显示删除后的列表。

修改后:

            DialogResult result = MessageBox.Show("是否要修改当前行中单元格的内容?", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (this.dataGridView.SelectedRows.Count > 0)
            {
                if (result == DialogResult.Yes)
                {
                    //修改当前行单元格的内容
                    Entity.UserInfo deleteuser = new Entity.UserInfo();
                    for (int i = this.dataGridView.SelectedRows.Count; i > 0; i--)
                    {
                        deleteuser.UserID = Convert.ToInt32(dataGridView.SelectedRows[i - 1].Cells[0].Value);
                        if (deleteuser.UserID == Convert.ToInt32(Entity.StaticUser.UserName))
                        {
                            MessageBox.Show("当前用户已登录,不能删除!", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                            return;
                        }
                        //调用后台方法删除数据库
                        Facade.frmAdmUserFacade facade = new Facade.frmAdmUserFacade();
                        bool resul = facade.DeleteUser(deleteuser);
                        //删除datagridview表中行
//this.dataGridView.Rows.RemoveAt(dataGridView.SelectedRows[i - 1].Index);
                    }
                    //重新获取数据库
comboLevel_SelectedIndexChanged(sender, e);
                    MessageBox.Show("删除成功!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Question);
                }
            }
            else
            {
                MessageBox.Show("未选中单元格", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                return;
            }
        }

做的修改是for循环里删除了一句话,并在循环完成后加了一行语句。

然后成功!

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值