Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 20.11.2019
Сообщений: 7
.NET 4.x

Сравнить две datagridview (два столбца), выделить несовпадения

20.11.2019, 13:17. Показов 2514. Ответов 18

Студворк — интернет-сервис помощи студентам
Всем привет, помогите, пожалуйста с кодом.
Мне нужно сравнить две таблицы. Обе datagrid заполняются из двух разных database.

1. таблица - сюда падают значения из таблицы, в которую попадаю значения вводимые в текст бокс. database - manualdt
ArtQty
12312312123
78945612125
14725836127
96385241129
97592003131

2. таблица - сюда попадают значения из базы данных, которые фильтруются по ранее созданной кнопке. database - selected truck
ArtNameQty
12312312qwe12
78945612wer125
14725836ert127
96385241rty129
97592003tyu111

Требуется сравнить столбец qty, основываясь на совпадениях в столбце art.
Подскажите как это сделать. Не могу найти нигде решений(
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.11.2019, 13:17
Ответы с готовыми решениями:

Разбить один столбец DataGridView на два столбца по символу - разделителю @
Всем привет! Есть один столбец в datagridview. Содержимое столбца: Фамилия Имя Иванов @ Вадим Петров @ Александр Косов @ Петр ...

Сравнить два столбца с разных листов и вывести несовпадения на отдельный лист
Добрый день, уважаемые ГУРУ VBA! Задача заключается в следующем, есть книга с двумя листами Лист 1 - Справочник Банков ЦБ...

Как сравнить два столбца и выделить строки, в которых данные не совпадают
Добрый день как сравнить два столбца с датами и выделить строки в которых дата не совпадает Добавлено через 1 минуту два столбца с...

18
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,739
Записей в блоге: 1
20.11.2019, 14:07
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
Dim gr1, gr2 As DataGridViewRow
Dim result As New List(Of DataGridViewRow)
 
For each gr1 in DataGridView1.Rows
    For each gr2 in DataGridView2.Rows 
        If gr2("Qty") = gr1("Qty") Then
            If Not result.Contains(gr2) Then
                result.Add(gr2)
            End if
        End if
    Next gr2
Next gr1
в result будут строки с совпадающими значениями Qty.
1
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
20.11.2019, 14:22
а потом что, после сравнения? Изложите полностью задачу, чтобы подобрать оптимальный вариант, т.к. по мне, лучще формировать массив Индерксов строк вместо самих строк, чтобы иметь возможность далее вносить в строки изменения.
0
0 / 0 / 0
Регистрация: 20.11.2019
Сообщений: 7
20.11.2019, 14:25  [ТС]
Как то не помогло( выдает ошибку

Добавлено через 2 минуты
мне трребуется сравнить данные двух таблиц. то что есть в системе, и то что внесено по документам. И выявить несоответсвие системных данных и документации. то что вноситься - вносится через textbox в базу данных, которая является datasource для gridview.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
20.11.2019, 14:26
Aleksandr Belyy, это я понятно. А что потом? После получения данных о разногласии значении? Редактировать или просто показать на экране эту разницу по каждой строке?
0
0 / 0 / 0
Регистрация: 20.11.2019
Сообщений: 7
20.11.2019, 14:34  [ТС]
мне нужно их просто выделить в обеих таблицах
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
20.11.2019, 15:24
Aleksandr Belyy, ну тогда сразу это и делайте, не создавая отдельный массив строк.
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,739
Записей в блоге: 1
20.11.2019, 15:47
VB.NET
1
2
3
4
5
6
7
8
9
10
Dim gr1, gr2 As DataGridViewRow
 
For each gr1 in DataGridView1.Rows
    For each gr2 in DataGridView2.Rows 
        If gr2("Qty") = gr1("Qty") Then
            gr1.DefaultCellStyle.BackColor = Color.Aquamarine
            gr2.DefaultCellStyle.BackColor = Color.Aquamarine
        End if
    Next gr2
Next gr1
строки с совпадающими значениями Qty будут выделены.

Добавлено через 4 минуты
можно пойти по другому, сначала все строки обоих гридов закрасить, а затем для совпадающих по Qty цвет фона сделать тем, который установлен по умолчанию. Тогда выделенными останутся только те, которые отличаются по Qty.
1
266 / 217 / 54
Регистрация: 01.08.2016
Сообщений: 836
20.11.2019, 15:52
Uswer, А почему идет подчеркивание перменных gr1и gr2 и пишет что Класс DataGridViewRow не может быть индексирован, так как не имеет свойства по умолчанию
0
0 / 0 / 0
Регистрация: 20.11.2019
Сообщений: 7
20.11.2019, 15:56  [ТС]
USWER, к сожалению такой вариант получается не совсем корректный. т к количества бывают похожи. а мне требуется сравнить две ячейки нераздельно на совпадение.
то есть где арт одинаковый - там и qty должно совпадать.
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,739
Записей в блоге: 1
20.11.2019, 16:02
andrsh, попробуй применить оператор Option Strict Off

Aleksandr Belyy, так что ли?
VB.NET
1
2
3
4
5
6
7
8
9
10
Dim gr1, gr2 As DataGridViewRow
 
For each gr1 in DataGridView1.Rows
    For each gr2 in DataGridView2.Rows 
        If gr1("Art") = gr2("Art") AndAlso gr2("Qty") = gr1("Qty") Then
            gr1.DefaultCellStyle.BackColor = Color.Aquamarine
            gr2.DefaultCellStyle.BackColor = Color.Aquamarine
        End if
    Next gr2
Next gr1
0
0 / 0 / 0
Регистрация: 20.11.2019
Сообщений: 7
20.11.2019, 16:47  [ТС]
Uswer, не выходит(
Выдает ошибку: An unhandled exception of type 'System.NullReferenceException' occurred in Check deliveries.exe

Additional information: Object reference not set to an instance of an object.
0
266 / 217 / 54
Регистрация: 01.08.2016
Сообщений: 836
20.11.2019, 17:26
Aleksandr Belyy, Вот так работает все:
VB.NET
1
2
3
4
5
6
7
8
9
10
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        For ia As Integer = 0 To DGV1.Rows.Count - 1
            For ib As Integer = 0 To DGV2.Rows.Count - 1
                If DGV1.Rows(ia).Cells(1).Value = DGV2.Rows(ib).Cells(2).Value Then
                    DGV1.Rows(ia).DefaultCellStyle.BackColor = Color.Aquamarine
                    DGV2.Rows(ib).DefaultCellStyle.BackColor = Color.Aquamarine
                End If
            Next
        Next
    End Sub
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,739
Записей в блоге: 1
20.11.2019, 18:18
Лучший ответ Сообщение было отмечено Aleksandr Belyy как решение

Решение

Aleksandr Belyy, andrsh, признаю ошибку. Проверил в среде, вот как будет работать:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
Dim gr1, gr2 As DataGridViewRow
 
For each gr1 in DataGridView1.Rows
    For each gr2 in DataGridView2.Rows 
        If CLng(gr1.Cells("Art").Value) = CLng(gr2.Cells("Art").Value) AndAlso _
           CLng(gr1.Cells("Qty").Value) = CLng(gr2.Cells("Qty").Value) Then
            gr1.DefaultCellStyle.BackColor = Color.Aquamarine
            gr2.DefaultCellStyle.BackColor = Color.Aquamarine
        End if
    Next gr2
Next gr1
1
266 / 217 / 54
Регистрация: 01.08.2016
Сообщений: 836
20.11.2019, 18:50
Uswer, Подскажи, почему у меня твой пример опять не работает? Ошибка : " Не удается найти столбец с именем Art". Хотя названия столбцов совпадают. Это уже не только в этом случае. Типа таких вопросов были еще на форуме и результат такой же. По индексам столбцов все нормально получается.

Добавлено через 10 минут
Все, понял почему так происходит. Так как колонны добавляются в ДГВ вручную, при создании дгв то надо было добавить такой код:
VB.NET
1
2
3
4
Column1.Name = "Art"
        Column2.Name = "Qty"
        Column3.Name = "Art"
        Column5.Name = "Qty"
Если бы данные заносились в дгв из дататабле или из бд то присваивать имена колоннам не надо.
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,739
Записей в блоге: 1
20.11.2019, 20:32
andrsh, я не приветствую обращение к элементам DataGridView и другим элементам управления используя жёсткую привязку к индексам. Это связано в первую очередь с тем, что структура данных может поменяться и все привязки по индексам придётся исправлять, как минимум проверять. Этого недостатка лишена именованная привязка. Это чисто мой взгляд на написание кода, твой вариант также работоспособен, с маленькой оговоркой о типах сравниваемых данных в IF.
0
0 / 0 / 0
Регистрация: 20.11.2019
Сообщений: 7
21.11.2019, 18:20  [ТС]
к сожалению опять выдает ошибку... Я думаю, что это изза пустой строки в датагридвью , куда текст через текстбокс падает. Что можно прописать, чтоб он не считывал строку, в которой нет данных?

*****
An unhandled exception of type 'System.NullReferenceException' occurred in Check deliveries.exe

Additional information: Object reference not set to an instance of an object.

Добавлено через 1 час 3 минуты
Uswer, спасибо. Я чуть доработал твой вчерашний код - сделал проверку на значения в строке) помогло)

а есть мысль, как отсортировать по цвету эти таблицы, после подкрашивания?
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,739
Записей в блоге: 1
21.11.2019, 18:31
Цитата Сообщение от Aleksandr Belyy Посмотреть сообщение
Что можно прописать, чтоб он не считывал строку, в которой нет данных?
Добавить проверку на присутствие данных пример см. здесь.
0
0 / 0 / 0
Регистрация: 20.11.2019
Сообщений: 7
21.11.2019, 18:43  [ТС]
Цитата Сообщение от Uswer Посмотреть сообщение
Добавить проверку на присутствие данных пример см. здесь.
Да, я уже нашел решение, осталось сортировку наладить) Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.11.2019, 18:43
Помогаю со студенческими работами здесь

Сравнить два текста, разницу выделить
Здравствуйте, надо сравнить 2 текста, 1-й исходный, 2-й немного измененный, удаленные фрагметы с 1-го текста выделять , со 2-го...

Сравнить построчно два столбца
Добрый день, есть два столбца A и B с текстовыми данными, нужно их сравнить, найти значение в столбце B, которое отсутствует в А и записать...

Сравнить два столбца таблиц
Здравствуйте! Есть две таблицы: Отделы и Работники. Во второй таблице есть столбец отделы для отображения информации о работнике( в каком...

Сравнить два диапазона, и выделить цветом отсутствующие позиции в противоположных списках
Всем, Доброго времени суток! Имеется замечательный макрос (Благодарю автора Hugo), который сравнивает две таблицы по двум...

Сравнить два столбца в двух книгах
Есть один столбец в котором 23000 строк в книге №1, и есть столбец с 1600 стоками в книге №2. Нужно, чтобы в книге №1 были выделены те...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru