Форум программистов, компьютерный форум, киберфорум
Jlovenpk1
Войти
Регистрация
Восстановить пароль

Сравнить два DataGridView C#

Запись от Jlovenpk1 размещена 29.01.2019 в 10:59
Показов 2334 Комментарии 4

Зачем вы мучаетесь с контролом? Не проще сделать через словарь/лист/массив
Очень долго мучался с DataGridView, хотел сравнить их, удалить множественные дубликаты, а потом производить выгрузку в базу с проверкой данных.
В общем говоря сделал, название топика обманчиво.
Буду рад, если кто-то предложит вменяемый способ сравнения двух DataGridView C# с расчетом на то, что строк будет свыше 1000.

Мое решение:
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
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
 preLoad = new Load_Grid();
            preLoad.Connect();
 
            #region удаляем дубли из пришедшего экселя
            Dictionary<int, string> mainData = new Dictionary<int, string>();
            Dictionary<int, string> secondData = new Dictionary<int, string>();
 
            for (int i = 0; i < ViewGridActive.Rows.Count; i++)
            {
                mainData.Add(i, ViewGridActive.Rows[i].Cells[0].Value.ToString());
                secondData.Add(i, ViewGridActive.Rows[i].Cells[0].Value.ToString());
            }
 
            var test = mainData.Values.Union(secondData.Values).Distinct();
            #endregion
 
            test.ToArray();
            bool LogicCheck = false;
            List<string> adresForInsert = new List<string>();
            for (int i = 0; i < ViewGridActive.Rows.Count; i++)
            {
                for (int x = 0; x < ViewGridBaza.RowCount; x++)
                {
                    if (ViewGridActive.Rows[i].Cells[0].Value.Equals((ViewGridBaza.Rows[x].Cells[1].Value.ToString())))
                    {
                        #region Мутим переменные для отправки
                        var object_ = int.Parse(ViewGridBaza.Rows[x].Cells[0].Value.ToString());
                        var trouble = ViewGridActive.Rows[i].Cells[1].Value.ToString();
                        var type_trouble = ViewGridActive.Rows[i].Cells[2].Value.ToString();
                        var size = int.Parse(ViewGridActive.Rows[i].Cells[3].Value.ToString());
                        var dt = preLoad.ConvertTextToDateTime(ViewGridActive.Rows[i].Cells[4].Value.ToString());
                        #endregion
 
                        ViewGridActive.Rows[i].DefaultCellStyle.BackColor = Color.Orange;
                        preLoad.InsertInformation(object_, trouble, type_trouble, size, dt);
 
                        #region для теста преобразование даты
                        //var Test = preLoad.ConvertTextToDateTime(ViewGridActive.Rows[i].Cells[4].Value.ToString()); 
                        //MessageBox.Show(preLoad.ConvertTextToDateTime(ViewGridActive.Rows[i].Cells[4].Value.ToString()).ToString());
                        //MessageBox.Show(preLoad.ConvertDateTime(Test).ToString());
                        #endregion
                        LogicCheck = false;
                        break;
                    }
                    else
                    { LogicCheck = true; }
                    
                }
                if (LogicCheck == true)
                {
                    adresForInsert.Add(ViewGridActive.Rows[i].Cells[0].Value.ToString());
                }
            }
            ViewGridBaza.Rows.Clear();
            foreach (string txest in adresForInsert)
            {
                ViewGridBaza.Rows.Add(txest);
            }
 
            #region Проверяем есть ли чо грузить
            if (adresForInsert.Count > 1)
            {
                DialogResult result = MessageBox.Show("Окно загрузки", "Начать загрузку новых адресов?", MessageBoxButtons.YesNo);
                if (result == DialogResult.Yes)
                {
                    foreach (string txest in adresForInsert)
                    {
                        preLoad.InsertAdres(txest);
                    }
                }
                else
                {
                    MessageBox.Show("Обновление базы адресов отменено");
                }
            }
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 4
Комментарии
  1. Старый комментарий
    Аватар для Storm23
    А еще немного и вы поймете, что сравнивать DataGridView - не комильфо.
    И что DataGridView - всего лишь визуальный компонент. И что нужно работать не с гридами, а с моделью данных.
    А там и до MVC не далеко.
    Запись от Storm23 размещена 29.01.2019 в 14:06 Storm23 вне форума
  2. Старый комментарий
    Аватар для Jlovenpk1
    Цитата Сообщение от Storm23
    А еще немного и вы поймете, что сравнивать DataGridView - не комильфо.
    И что DataGridView - всего лишь визуальный компонент. И что нужно работать не с гридами, а с моделью данных.
    А там и до MVC не далеко.
    Это то понятно все дело, просто принципиально хотелось попробовать сравнить два DataGridView.
    Вот и интересно, удалось ли кому адекватно это сделать.
    Запись от Jlovenpk1 размещена 29.01.2019 в 19:04 Jlovenpk1 вне форума
  3. Старый комментарий
    Аватар для Usaga
    Адекватно сделать неадекватную вещь может быть затруднительно.

    У данных, что визуализируют ваши DataGridView, есть первоисточник. Т.е. откуда-то же данные взялись, которыми эти табличные контролы были наполнены? Вот эти первоисточники и надо сравнивать, а не визуализированное их представление.

    А так получается, что вы по двум текстам нарисовали пальцем на стене картины и по этим картинам пытаетесь сравнивать эти тексты. И ещё ждёте, что вам адекватный подход к этому подскажут.
    Запись от Usaga размещена 19.02.2019 в 08:02 Usaga вне форума
  4. Старый комментарий
    Аватар для Соколиный глаз
    Адекватный подход: сравнивайте попиксельно.
    Запись от Соколиный глаз размещена 20.02.2019 в 05:25 Соколиный глаз вне форума
 
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru