tb1表中序号是唯一的,记录有上千条,我需要的是在datagridview1控件中选中多行,点删除后,就执行 "delete tb1 where 序号=" + datagridview1[0, datagridview1.CurrentCell.RowIndex].Value.ToString()" 在数据库中删除该条语句
然后再datagridview1.DataSource = operdb.strdt("SELECT 序号,员工编号,单位,姓名 from tb1);重新加载datagridview1数据, 现在问题是我如何使用循环在数据库中一条一条的删除我在datagridview1中选中的多行数据.
9 个解决方案
#1
DataGridViewCheckBox选择删除
foreach (DataGridViewRow dr in this.dataGridView1.Rows)
{
DataGridViewCheckBoxCell cbx = (DataGridViewCheckBoxCell)dr.Cells[0];
if ((bool)cbx.FormattedValue)
{
}
}
foreach (DataGridViewRow dr in this.dataGridView1.Rows)
{
DataGridViewCheckBoxCell cbx = (DataGridViewCheckBoxCell)dr.Cells[0];
if ((bool)cbx.FormattedValue)
{
}
}
#2
delete 表名 where 字段 in (id,id,id,id,id)
这样也可以
不过你要传你要删除行的id
这样也可以
不过你要传你要删除行的id
#3
楼上的已经给出解决办法了,楼主试试。
#4
如果你是用DataGridViewCheckBox选择的话就用2楼的方法
如果dataGridView允许多行选择的话,就试下以下方法。
如果dataGridView允许多行选择的话,就试下以下方法。
SqlCommand cmd = new SqlCommand(string.Empty, sqlcon);
SqlTransaction tran = cmd.Transaction;
try
{
for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
{
cmd.CommandText = "delete tb1 where 序号=" + dataGridView1.SelectedRows[i].Cells[0].ToString();
cmd.ExecuteNonQuery();
}
tran.Commit();
MessageBox.Show("删除成功! ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch(Exception ex)
{
tran.Rollback();
MessageBox.Show("删除失败! " + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
#5
2楼正解
不过楼主为什么要每删除一条就要重新绑定数据源呢
弄个进度条显示删除进度 操作完成后再绑定不好点?
频繁的开启和关闭数据库连接 如果要删除的数据太多 还不慢死
不过楼主为什么要每删除一条就要重新绑定数据源呢
弄个进度条显示删除进度 操作完成后再绑定不好点?
频繁的开启和关闭数据库连接 如果要删除的数据太多 还不慢死
#6
循环遍历选中行数,再获取到当前行的dt1列数据,然后删除
/// <summary>
/// 删除用户信息方法
/// </summary>
private void DeleteUserInfo()
{
if (MessageBox.Show("确认要删除选择的记录吗?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
int selectNum = this.dgvUserInfo.SelectedRows.Count;
for (int i = 0; i < selectNum; i++)
{
int uid = Convert.ToInt32(dgvUserInfo.SelectedRows[i].Cells[0].Value.ToString());
byte[] byteId = new byte[1];
byteId[0] = (byte)uid;
byte[] byteData = BllManager.GetSendByte(byteId, Convert.ToInt32(MainState.UserInfo), Convert.ToInt32(UserInfos.DeleteUserInfo), 0);
ClientConnService.AddSendQueueManager(byteData);
}
}
}
#7
关键代码就是这里
int selectNum = this.dgvUserInfo.SelectedRows.Count;
//得到选中的行数
for (int i = 0; i < selectNum; i++)
{
//得到第i行第一列的值,即id标识(应为我这里第一列是唯一标识)
int uid = Convert.ToInt32(dgvUserInfo.SelectedRows[i].Cells[0].Value.ToString());
//执行删除
}
#8
#9
你不能确定"delete 表名 where 字段 in (id,id,id,id,id)”这句的id的个数好吧!你自己再想想
#1
DataGridViewCheckBox选择删除
foreach (DataGridViewRow dr in this.dataGridView1.Rows)
{
DataGridViewCheckBoxCell cbx = (DataGridViewCheckBoxCell)dr.Cells[0];
if ((bool)cbx.FormattedValue)
{
}
}
foreach (DataGridViewRow dr in this.dataGridView1.Rows)
{
DataGridViewCheckBoxCell cbx = (DataGridViewCheckBoxCell)dr.Cells[0];
if ((bool)cbx.FormattedValue)
{
}
}
#2
delete 表名 where 字段 in (id,id,id,id,id)
这样也可以
不过你要传你要删除行的id
这样也可以
不过你要传你要删除行的id
#3
楼上的已经给出解决办法了,楼主试试。
#4
如果你是用DataGridViewCheckBox选择的话就用2楼的方法
如果dataGridView允许多行选择的话,就试下以下方法。
如果dataGridView允许多行选择的话,就试下以下方法。
SqlCommand cmd = new SqlCommand(string.Empty, sqlcon);
SqlTransaction tran = cmd.Transaction;
try
{
for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
{
cmd.CommandText = "delete tb1 where 序号=" + dataGridView1.SelectedRows[i].Cells[0].ToString();
cmd.ExecuteNonQuery();
}
tran.Commit();
MessageBox.Show("删除成功! ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch(Exception ex)
{
tran.Rollback();
MessageBox.Show("删除失败! " + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
#5
2楼正解
不过楼主为什么要每删除一条就要重新绑定数据源呢
弄个进度条显示删除进度 操作完成后再绑定不好点?
频繁的开启和关闭数据库连接 如果要删除的数据太多 还不慢死
不过楼主为什么要每删除一条就要重新绑定数据源呢
弄个进度条显示删除进度 操作完成后再绑定不好点?
频繁的开启和关闭数据库连接 如果要删除的数据太多 还不慢死
#6
循环遍历选中行数,再获取到当前行的dt1列数据,然后删除
/// <summary>
/// 删除用户信息方法
/// </summary>
private void DeleteUserInfo()
{
if (MessageBox.Show("确认要删除选择的记录吗?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
int selectNum = this.dgvUserInfo.SelectedRows.Count;
for (int i = 0; i < selectNum; i++)
{
int uid = Convert.ToInt32(dgvUserInfo.SelectedRows[i].Cells[0].Value.ToString());
byte[] byteId = new byte[1];
byteId[0] = (byte)uid;
byte[] byteData = BllManager.GetSendByte(byteId, Convert.ToInt32(MainState.UserInfo), Convert.ToInt32(UserInfos.DeleteUserInfo), 0);
ClientConnService.AddSendQueueManager(byteData);
}
}
}
#7
关键代码就是这里
int selectNum = this.dgvUserInfo.SelectedRows.Count;
//得到选中的行数
for (int i = 0; i < selectNum; i++)
{
//得到第i行第一列的值,即id标识(应为我这里第一列是唯一标识)
int uid = Convert.ToInt32(dgvUserInfo.SelectedRows[i].Cells[0].Value.ToString());
//执行删除
}
#8
#9
你不能确定"delete 表名 where 字段 in (id,id,id,id,id)”这句的id的个数好吧!你自己再想想