删除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循环里删除了一句话,并在循环完成后加了一行语句。
然后成功!