powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Поиск дубликатов в DataGridView
11 сообщений из 11, страница 1 из 1
Поиск дубликатов в DataGridView
    #38745595
visak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите доработать, код, который бы в DataGridView с нулевой строки по последнюю, удалял бы все дубликаты, оставляя лишь уникальные значения. Буду весьма благодарен
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
   Dim i&, ii&

        For i = 0 To DataGridView4.Rows.Count - 2


            For ii = i + 1 To DataGridView4.RowCount - 2


                If DataGridView4.Rows(i).Cells(0).Value.ToString() = DataGridView4.Rows(ii).Cells(0).Value.ToString() Then

                    '  MsgBox(DataGridView4.Rows(i).Cells(0).Value.ToString())
                    DataGridView4.Rows.Remove(DataGridView4.Rows(i))

                    i -= 1
                End If

            Next

        Next
...
Рейтинг: 0 / 0
Поиск дубликатов в DataGridView
    #38745936
visak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
visak,

Гуру и эксперты Please Help me )
...
Рейтинг: 0 / 0
Поиск дубликатов в DataGridView
    #38745956
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
visak,
Уж надоело говорить и рассказывать, грид служит для визуализации данных: прикрутить какую нибудь <censored>, конвертировать одну <censored> в другую, все манипуляции сданными ( как правило с перечислениями) нужно проводить с данными перед соитием с гридом.
В данном случае - where
зы я конешно изв-сь. за мат, я так думаю в голове это быстрее усвоится ( в данном случае)

Модератор: Пост приведён в соответствие с законодательством РФ
...
Рейтинг: 0 / 0
Поиск дубликатов в DataGridView
    #38746059
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При переходе на мат эффективность команд командира возрастает втрое
...
Рейтинг: 0 / 0
Поиск дубликатов в DataGridView
    #38746067
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мат

При анализе Второй мировой войны американские военные историки обнаружили очень интересный факт. А именно, при внезапном столкновении с силами японцев американцы, как правило, гораздо быстрее принимали решения - и, как следствие, побеждали даже превосходящие силы противника. Исследовав данную закономерность, учёные пришли к выводу, что средняя длина слова у американцев составляет 5.2 символа, тогда как у японцев 10.8. Следовательно, на отдачу приказов у американцев уходило на 56% меньше времени, что в коротком бою играет немаловажную роль. Ради "интереса" они проанализировали русскую речь - и оказалось, что длина слова в русском языке составляет 7.2 символа на слово (в среднем). Однако, при критических ситуациях, русскоязычный командный состав переходит на ненормативную лексику - и длина слова сокращается до (!) 3.2 символов в слове. Это связано с тем, что некоторые словосочетания и даже фразы заменяются одним словом. Для примера приводится фраза:

Полная информация:
32-ой - приказываю немедленно уничтожить вражеский танк, ведущий огонь по нашим позициям справа;

Русская боевая команда:
32-ой - ё... того х.я справа!
тынц
...
Рейтинг: 0 / 0
Поиск дубликатов в DataGridView
    #38746070
igr_ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
visak,

Отсортировать по ключу, сравнивать в цикле записи i и i-1 и при равенстве удалять i.
for(int i=countRecords-1;i>0;i--)
{
if(...[i]["keyField"]==...[i-1]["keyField"])
...[i].Delete();
}

Где-то в степи,

Будем надеяться, что в 5-м Framework-е появятся не только эти классы, но и подходящее для них пространство имен. :)
...
Рейтинг: 0 / 0
Поиск дубликатов в DataGridView
    #38746193
visak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim dt As DataTable = New DataTable With {.TableName = "MyTable"}

        dt.Columns.Add(
            New DataColumn With
            {
                .ColumnName = "Identifier",
                .DataType = GetType(Int32),
                .AutoIncrement = True,
                .AutoIncrementSeed = 1,
                .ColumnMapping = MappingType.Hidden
            }
        )

        dt.Columns.Add(
            New DataColumn With
            {
                .ColumnName = "Name",
                .DataType = GetType(String)
            }
        )

        dt.Columns.Add(
            New DataColumn With
            {
                .ColumnName = "Status",
                .DataType = GetType(Boolean),
                .ColumnMapping = MappingType.Hidden
            }
        )

        dt.Rows.Add(New Object() {Nothing, "Karen", False})
        dt.Rows.Add(New Object() {Nothing, "Karen", True})
        dt.Rows.Add(New Object() {Nothing, "Bill", True})
        dt.Rows.Add(New Object() {Nothing, "Karen", False})
        dt.Rows.Add(New Object() {Nothing, "Bill", True})

        DataGridView1.DataSource = dt

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim dt As DataTable = CType(DataGridView1.DataSource, DataTable)
        '
        ' Find duplicates on Name and Status columns, remember the 
        ' primary key value so we can iterate the DataTable and remove
        ' the duplicates
        '
        Dim duplicates = dt.AsEnumerable().GroupBy(
            Function(r) New With
                        {
                            Key .Name = r("Name"),
                            Key .Status = r("Status"),
                                .Identifier = r("Identifier")
                        }
            ).Where(Function(gr) gr.Count() > 1) _
            .Select(Function(g) g.Key)

        '
        ' Iterate DataTable, get a reference to a duplicate and remove it
        '
        For Each d In duplicates

            dt.Rows.Remove(
                dt.AsEnumerable.Where(
                    Function(r) _
                    r.Field(Of Integer)("Identifier") _
                    .Equals(d.Identifier)).First
            )

        Next
    End Sub
End Class


вот, по идее то-что ищет и удаляет дубликат, но как-то херово он работает, можете поправить код, чтобы удалял все повторения, но только мне нужен один столбец, первый, а другие два, как тут и нафиг не нужны))))))
...
Рейтинг: 0 / 0
Поиск дубликатов в DataGridView
    #38746261
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
visak,
перечитал три раза, ничего не понял что вы таргетируете?
если в гриде нужно отобразить первое поле ( я так предположил)
вы должны дистингировать входные данные, по вашим критериям, из них селектировать первое поле, желательно в виде анонимного типа, и перечисление этих анонимных типов инжектировать в грид, грид сам разберется по дефолту как и что показывать..
...
Рейтинг: 0 / 0
Поиск дубликатов в DataGridView
    #38746307
visak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я всё же нашёл верное решение, кому интересно
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
For i = DataGridView4.Rows.Count - 1 To 1 Step -1
            For ii = i - 1 To 0 Step - 1
                If DataGridView4.Rows(i).Cells(0).Value.ToString() = DataGridView4.Rows(ii).Cells(0).Value.ToString() Then

                    '  MsgBox(DataGridView4.Rows(i).Cells(0).Value.ToString())
                    DataGridView4.Rows.Remove(DataGridView4.Rows(ii))

                    i -= 1
                End If

            Next

        Next



Да это не совсем правильно, но мне было интересно сделать именно так.
...
Рейтинг: 0 / 0
Поиск дубликатов в DataGridView
    #38746339
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
visak,
со стороны данных, как пример
через аккумулятор агрегатной функции
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
        private class MyClass 
        {
            public string FirstName { get; set; }
            public string LastName { get; set; }
        }

        private void Form1Load(object sender, EventArgs e)
        {
            dataGridView1.DataSource = new List<MyClass>
                       {
                           new MyClass {FirstName = "aa", LastName = "bb"},
                           new MyClass {FirstName = "aa", LastName = "cc"},
                           new MyClass {FirstName = "aa", LastName = "bb"},
                           new MyClass {FirstName = "aa", LastName = "cc"},
                           new MyClass {FirstName = "LL", LastName = "bb"},
                           new MyClass {FirstName = "cc", LastName = "cc"}
                       }; 
        }

        private void Button1Click(object sender, EventArgs e)
        {
            dataGridView1.DataSource = ((IEnumerable<MyClass>)dataGridView1.DataSource).Aggregate(new List<MyClass>(),
                    (list, myclass) =>
                    {
                        if (list.All(a => a.FirstName != myclass.FirstName))
                            list.Add(myclass);
                        return list;
                    });
        }
...
Рейтинг: 0 / 0
Поиск дубликатов в DataGridView
    #38746357
visak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи, спасибо)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Поиск дубликатов в DataGridView
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]