【问题标题】:How to clone and remove unselected rows in DataGridView?如何克隆和删除 DataGridView 中未选择的行?
【发布时间】:2016-01-20 04:14:26
【问题描述】:

我需要以编程方式删除 DataGridView 中除选定行之外的所有行。首先,我只需要从 CtrlDataGridView1 中获取选定的行并将它们放入 dgv。我试过这个

Public ReadOnly Property CtrlDataGridView1Filtered() As DataGridView
    Get
        Dim dgv As New DataGridView
        dgv = CtrlDataGridView1

        For Each dr As DataGridViewRow In CtrlDataGridView1.Rows
            If Not dr.Selected Then
                dgv.Rows.Remove(dr)
            End If
        Next
        Return dgv
    End Get
End Property

但这不行,因为 CtrlDataGridView1 的行被删除了。但我只需要删除 dgv 的行。

我该怎么办?如何解决这个问题?

【问题讨论】:

  • dgv 是参考,CtrlDataGridView1 也是。使用dgv = CtrlDataGridView1 可以使两个引用指向同一个对象。
  • 如何克隆 CtrlDatagridView 的结构?。我需要克隆没有行的列。
  • 您可以修改数据源,DGV 将随之而来。只有当您使用未绑定的网格时,在网格之间复制/删除行才会有用。

标签: c# .net vb.net datagridview clone


【解决方案1】:

您可以克隆一个 DataGridView,然后将所需的行复制到其中,例如

'CLONE COLUMNS ONLY'
Dim dgv As New DataGridView
For Each dgvCol As DataGridViewColumn In CtrlDataGridView1.Columns
    dgv.Columns.Add(New DataGridViewColumn(dgvCol.CellTemplate))
Next

'COPY SELECTED / UNSELECTED ROWS AS PER YOUR REQUIREMENT'
For Each dr As DataGridViewRow In CtrlDataGridView1.Rows
    If dr.Selected Then
    'OR If Not dr.Selected Then'
        dgv.Rows.Add(dr.Clone)
    End If
Next

【讨论】:

  • dgv.Rows.Add(dr) 是错误“提供的行已经属于 DataGridView 控件。”
  • 在这种情况下,您需要克隆该行,然后将其添加到另一个网格视图。尝试dgv.Rows.Add(dr.Clone) 或创建一个新的 Row 对象并将 dr 克隆到它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 2015-12-31
  • 2010-10-19
相关资源
最近更新 更多