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

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

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

Цитата:
Зачем вы мучаетесь с контролом? Не проще сделать через словарь/лист/массив
Очень долго мучался с 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("Обновление базы адресов отменено");
                }
            }
Размещено в Без категории
Просмотров 159 Комментарии 2
Всего комментариев 2
Комментарии
  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 вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru