Удалите объединенные дубликаты в datagridview vb.net. сеть - PullRequest
0 голосов
/ 18 марта 2019

Используя 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 голосов
/ 19 марта 2019

Если вам просто не нужен последний столбец, лучшим решением будет, как я указывал ранее, изменить запрос, чтобы вы могли использовать ключевое слово DISTINCT.Однако он не будет работать со столбцом «Клиент», так как этот столбец не будет объединен.

Существует другой метод, который, на мой взгляд, не так элегантен, но, тем не менее, эффективен.Вы можете создать новый DataTable, заполнить его без дубликатов и заменить его источником данных вашего DataGridView.

    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

Я не смог протестировать его в спешке, поэтому, пожалуйста, рассмотрите его как предложение, котороеможет потребоваться некоторая настройка, чем решение, как есть.Надеюсь, это поможет!

...