加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 删除DataGridView(表)中的多行

发布时间:2020-12-15 21:35:53 所属栏目:百科 来源:网络整理
导读:我有一个数据“myTable”,它与DataGridView“dgv”绑定. DataGridView“dgv”有一个复选框列.我的目标是删除按钮事件中检查的行.数据表当然会更新. 现在我的代码只用于删除一行而不是多行. 感谢帮助. private void btnDel_Click(object sender,EventArgs e)
我有一个数据“myTable”,它与DataGridView“dgv”绑定. DataGridView“dgv”有一个复选框列.我的目标是删除按钮事件中检查的行.数据表当然会更新.
现在我的代码只用于删除一行而不是多行.

感谢帮助.

private void btnDel_Click(object sender,EventArgs e)
    {
        try
        {
            if (dgv.RowCount>0)
            {
                foreach (DataGridViewRow row in dgv.Rows)
                {
                    DataGridViewCheckBoxCell check = row.Cells[0] as DataGridViewCheckBoxCell;
                    if (check.Value != null)
                    {
                        if ((bool)check.Value)
                        {
                            DataRowView currentDataRowView = (DataRowView)dgv.CurrentRow.DataBoundItem;
                            DataRow dataRow = currentDataRowView.Row;

                            int n = dgv.CurrentRow.Index;
                            int intID = Convert.ToInt32(dgv.Rows[n].Cells[0].Value);
                            myTable.Rows.Remove(dataRow);
                            dgv.DataSource = myTable;

                            Int32 intVal = Convert.ToInt32(row.Cells[1].Value);
                            if (intVal == intID)
                            {
                                check.Value = null;
                            }
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

解决方法

我找到了解决方案.错误是由

DataRowView currentDataRowView = (DataRowView)dgv.CurrentRow.DataBoundItem;

currentDataRowView不是选中的行.
正确的代码是:

List<DataRow> toDelete = new List<DataRow>(); 
                for (int i = 0; i < dgv.Rows.Count; i++)
                {
                    {
                        DataGridViewRow row = dgv.Rows[i];
                        DataGridViewCheckBoxCell check = row.Cells[0] as DataGridViewCheckBoxCell;
                        if (check.Value != null && (bool)check.Value)
                        {
                            DataRow dataRow = (row.DataBoundItem as DataRowView).Row;
                            toDelete.Add(dataRow);
                        }
                    }
                }
                toDelete.ForEach(row => row.Delete());

谢谢大家的帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读