峰峦@叠嶂 2024-05-17 10:32 采纳率: 99.5%
浏览 0
已结题

实现dgv查询行,批量删除的效果

请问一下,我想实现对查询出的行,实现选中后批量删除的效果,目前是采用以下方法,及在CellMouseClick事件下面,但实际运行时,还是单行删除的效果,请看看哪里有什么问题吗,谢谢;

private void DeleteSelectedRows()
{
    List<int> idsToDelete = new List<int>();
 
    foreach (DataGridViewRow row in dataGridView1.SelectedRows)
    {
        int id = Convert.ToInt32(row.Cells["id"].Value);
        idsToDelete.Add(id);
    }
 
    if (idsToDelete.Count > 0)
    {
        using (SqlConnection conn = new SqlConnection("server=192.168.100.247;database=Whmesinfo;user=sa;password=whyy@2021"))
        {
            conn.Open();
            
            foreach (int id in idsToDelete)
            {
                string datadel = string.Format("delete from w_prohourcount where id = {0} ",id);
                
                using (SqlCommand comm = new SqlCommand(datadel, conn))
                {
                    int rowsAffected = comm.ExecuteNonQuery();
                    
                    if (rowsAffected == 0)
                    {
                        MessageBox.Show("部分删除失败");
                        break;
                    }
                }
            }
 
            if (conn.State == ConnectionState.Open)
            {
                conn.Close();
            }
 
            // 删除选中的行(仅在所有删除操作成功后)
            foreach (int id in idsToDelete)
            {
                dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows.Cast<DataGridViewRow>().First(r => Convert.ToInt32(r.Cells["id"].Value) == id).Index);
            }
        }
    }
}

private List<int> selectedRowIds = new List<int>();
        private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.RowIndex >= 0 && (e.ColumnIndex == dataGridView1.Columns["DeleteColumn"].Index || e.ColumnIndex == dataGridView1.Columns["UpdateColumn"].Index))
            {
                    // 删除按钮被点击
                if (e.ColumnIndex == dataGridView1.Columns["DeleteColumn"].Index)
                {
                    int id = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["id"].Value);

                    if (selectedRowIds.Contains(id))
                    {
                        selectedRowIds.Remove(id);
                    }
                    else
                    {
                        selectedRowIds.Add(id);
                    }
                }

                

                // 修改按钮被点击
                if (e.ColumnIndex == dataGridView1.Columns["UpdateColumn"].Index)
                {
                          。。。。。。。。。。。。。
                }
            }
        }

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-17 10:32
    关注

    在CellMouseClick事件中,检查多选模式并处理选定行的删除。

    以上回复有部分引自免费微信小程序:皆我百晓生。 如问题尚未解决,还请稍待,如有疑问请回复进一步沟通。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月14日
  • 已采纳回答 6月6日
  • 创建了问题 5月17日

悬赏问题

  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术