在datagridview vb.net中删除组合副本。净

时间:2019-03-18 10:26:37

标签: vb.net datagridview duplicates

使用vb.net如何根据同一行中找到的两个单元格值删除重复项?我知道如何在每一列中做到这一点,而不仅仅是在列集中。

我在想什么

    For LoopA As Integer = 0 To DataGridView1.Rows.Count - 2
        For LoopB As Integer = LoopA + 1 To DataGridView1.Rows.Count - 2
            If DataGridView1.Rows(LoopA).Cells(2).Value = DataGridView1.Rows(LoopB).Cells(2).Value & DataGridView1.Rows(LoopA).Cells(3).Value = DataGridView1.Rows(LoopB).Cells(3).Value Then
                DataGridView1.Rows.RemoveAt(LoopB)
            End If
        Next
    Next

我没有被客户的最后一列吸引。第一列是产品类型,第二列是产品长度。

我希望HD 300系列仅出现一次,因为这是唯一出现的非唯一组合。

我该如何实现? enter image description here

1 个答案:

答案 0 :(得分:0)

如果您不需要最后一列,最好的解决方案就是更改查询,以便您可以使用DISTINCT关键字,正如我之前指出的那样。不过,它不会与“客户”列配合使用,因为该列不会合并。

还有另一种方法,我认为不那么优雅,但仍然有效。您可以创建一个新的DataTable,使其没有重复,然后将其替换为DataGridView的DataSource。

    Dim originTable as DataTable = yourDataGridView.DataSource
    Dim destinationTable As New DataTable
    destinationTable.Columns.Add("Type", GetType(String))
    destinationTable.Columns.Add("Length", GetType(Integer))

    For Each row As DataRow In originTable.Rows
        Dim duplicates() As DataRow = destinationTable.Select("Type = " & row("Type").ToString & " AND Length = " & row("Length").ToString)
        If duplicates.Length = 0 Then
            destinationTable.Rows.Add(row("Type").ToString, row("Length"))
        End If
    Next

    yourDataGridView.DataSource = destinationTable

我无法立即对其进行测试,因此请考虑将其作为建议,而不是直接采用解决方案。希望对您有帮助!