DataGridView可以多选后点一个Button进行批量删除,也可以选中一行按键盘上的delete键删除一行
下面是按delete键删除一行的代码
private void dataGridView1_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
{
DialogResult comfirmResult = MessageBox.Show(this, "确实要删除选中的记录吗?", "确认",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1,
MessageBoxOptions.RightAlign);
if (!comfirmResult.Equals(DialogResult.Yes)) e.Cancel = true;
}
private void dataGridView1_UserDeletedRow(object sender, DataGridViewRowEventArgs e)
{
this.cardModesTableAdapter.Update(this.saleDataSet.CardModes);
}
蓝色那一段,是在DataGridView里新建数据源时生成的DataSet,连接这个数据源,自动会生成对应的TableAdapter,CardModes是我的表名,一般自动生成的DataSet只有Fill方法,即select语句,打开DataSet后,可以给对应的表添加查询,update、delete、insert都可以自动添加,删除添加的查询是:DELETE FROM [dbo].[CardModes] WHERE [CardModeID] = @Original_CardModeID;
下面是批量删除的方法,有两种方法
1.取选中行在DataGridView里的行号,删除数据源里对应行号的行,这个方法我还不知道运行机制是怎么样的,不知道具体到里面是怎么删除的,如果是删除对应行,有可能会因为多人同时操作而删除错误的数据,不过我还没有时间去查删除的原理,所以不能说这种方法有什么不好
DialogResult comfirmResult = MessageBox.Show(this, "确实要删除选中的记录吗?", "确认",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1,
MessageBoxOptions.RightAlign);
if (comfirmResult.Equals(DialogResult.Yes))
{
//要删除的总行数
int rowsCount = dataGridView1.SelectedRows.Count;
//取每一个选中行的行号
int index;
int[] rowsIndex = new int[rowsCount];
for (index = 0; index < rowsCount; index++)
{
rowsIndex[index] = dataGridView1.SelectedRows[index].Index;
}
//删除取出来的行号
index = 0;
while (index < rowsCount)
{
this.saleDataSet.CardModes.Rows[rowsIndex[index]].Delete();
index++;
}
//保存到数据库
this.cardModesTableAdapter.Update(this.saleDataSet.CardModes);
}
2.从选中行中取出关键字段值,逐行删除,我用到的表名是CardModes,关键字段名是CardModeID
DialogResult comfirmResult = MessageBox.Show(this, "确实要删除选中的记录吗?", "确认",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1,
MessageBoxOptions.RightAlign);
if (!comfirmResult.Equals(DialogResult.Yes)) return;
//要删除的总行数
int rowsCount = dataGridView1.SelectedRows.Count;
//删除
for (int index = 0; index < rowsCount; index++)
{
int nowRowIndex = dataGridView1.SelectedRows[index].Index;
int nowCardModeID = Convert.ToInt32(this.saleDataSet.CardModes.Rows[nowRowIndex]["CardModeID"]);
this.cardModesTableAdapter.DeleteQuery(nowCardModeID);
}
//重新填充数据
this.cardModesTableAdapter.Fill(this.saleDataSet.CardModes);