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

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

Запись от Jlovenpk1 размещена 29.01.2019 в 10:59
Показов 2295 Комментарии 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 Соколиный глаз вне форума
 
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru