【问题标题】:How to hide duplicate rows in a DataGridView?如何隐藏 DataGridView 中的重复行?
【发布时间】:2020-05-16 08:41:57
【问题描述】:

我有一个 DataGridView,我在其中从另一个表单传输了行。
在我的 DataGridView 中,我有三列:第一列是 name,第二列是 value,第三列是 id
我想隐藏具有相同 nameid 的重复行。
我怎样才能做到这一点?我的代码不起作用。

For i As Integer = 1 To Form.DataGridView1.Rows.Count - 1
    If Form.DataGridView1.Rows(i).Cells(0).Value.ToString = Form.DataGridView1.Rows(i - 1).Cells(0).Value.ToString AndAlso 
        Convert.ToInt32(Form.DataGridView1.Rows(i).Cells(2).Value) = Convert.ToInt32(Form.DataGridView1.Rows(i - 1).Cells(2).Value) Then
        Form.DataGridView1.Rows(i).Visible = False
    End If
Next

【问题讨论】:

  • 你的 DataGridView 的 DataSource 是什么?
  • 这是狗的早餐。代码已部分格式化,您仍然在问题中“在此处输入代码”,而不是在此处输入代码。我在这里回答了很多问题,我自己或其他任何人都不必浪费时间试图解释一个难以阅读的问题或编辑它以使其看起来首先应该具有的方式,就像@Jimi在这个场合做了。让您的问题尽可能清晰,以帮助我们帮助您,您无需付出任何努力。如果您希望我们自愿抽出时间来帮助您,这是否太过分了?
  • 发布的代码仅检查“连续”行是否有重复。给定图片,没有两个“连续”行是重复的。因此,代码不会找到任何重复项。为了删除所有重复,很可能需要多次通过网格。例如,名字是“apple”,id 为“1”。循环遍历整个网格并删除那些重复项,然后对下一个“橙色”执行相同操作……等等……
  • 在添加新记录时检查重复项似乎很有意义。

标签: vb.net winforms datagridview


【解决方案1】:

您仅将当前行与当前 index-1 行进行了比较。所以,你的代码不工作。您需要一个嵌套循环来消除重复行:

For i As Integer = 1 To Form.DataGridView1.Rows.Count - 1
        For j As Integer = i - 1 To 0 Step -1
            If Form.DataGridView1.Rows(i).Cells(0).Value.ToString = Form.DataGridView1.Rows(j).Cells(0).Value.ToString AndAlso
                            Convert.ToInt32(Form.DataGridView1.Rows(i).Cells(2).Value) = Convert.ToInt32(Form.DataGridView1.Rows(j).Cells(2).Value) Then
                Form.DataGridView1.Rows(i).Visible = False
            End If
        Next

    Next

这是输出

【讨论】:

    猜你喜欢
    • 2020-08-11
    • 1970-01-01
    • 2013-05-19
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 2016-03-28
    相关资源
    最近更新 更多