Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
1 / 1 / 3
Регистрация: 26.10.2013
Сообщений: 36

Подвисание при повторном клике по кнопке

23.01.2014, 19:18. Показов 946. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Как можно решить такую проблему:

При клике по button1 из базы в datagrigview выодится таблица (размер 15х600)
Потом с помощью циклов datagridview обрабатывается и выводится в виде, который нужно (удаляются лишние строки, колонки, ячейки и т.д)
Все это занимает не больше 1 секунды.

Но, если после этого повторно кликнуть по button1 - вывод datagridview в требуемом формате увеличивается до минуты.
dgv.Columns.Clear() не помогает.

Что нужно сделать, чтобы избежать такого огромного времени загрузки?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.01.2014, 19:18
Ответы с готовыми решениями:

При клике по кнопке, решение квадратного уравнения не выводится в label
Пожалуйста помогите. Мне нужно помочь с кусочком проекта) В одной из форм моего проекта нужно сделать так чтобы можно было решить просто...

При клике по панели и последующем клике в другом месте затрагиваемая панель должна сменить положение
Уверен, что подобные вопросы задавались не раз и не два, но все же осмелюсь задать вопрос. Итак, у меня есть массив панелей на...

Сделать, чтобы при клике на кнопке, блок #cont исчез, а при повторном клике блок #cont появился
Как сделать, чтобы при клике на кнопке, блок #cont исчез, а при повторном клике блок #cont появился? Вроде это уже устаревший способ и не...

6
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
23.01.2014, 20:15
Код обработчика кнопки можно посмотреть?
0
1 / 1 / 3
Регистрация: 26.10.2013
Сообщений: 36
23.01.2014, 20:57  [ТС]
Код выкладываю, прошу сразу не убивать.

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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
  private void button1_Click(object sender, EventArgs e)
        {         
            
            dgv1.Columns.Clear();
            dgv1.Visible = true;
 
           string constring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source= D:\Umis\Dbase.accdb";         
             OleDbConnection con = new OleDbConnection(constring);
               con.Open();
                 OleDbDataAdapter  adp = new OleDbDataAdapter("select * from PPR14", con);
                  con.Close();
                DataSet dset = new DataSet();
              adp.Fill(dset, "PPR14");
             DataTable dtable = new DataTable();
            dtable = dset.Tables["PPR14"];
           dgv1.DataSource = dtable;     
     
/******************** Если дата в базе содержит n - удаляем n, если y -меняем на 31.12.2014  ***********************************/
 
            for (int i = 0; i < dgv1.RowCount; i++)
            {
                for (int j = 3; j < dgv1.Columns.Count - 1; j++)
                {
 
                    if (dgv1[j, i].Value.ToString().Contains("n"))
                    {
                        string nill = dgv1[j, i].Value.ToString().Remove(10);
                        dgv1[j, i].Value = nill;
                    }
 
                    if (dgv1[j, i].Value.ToString() == "" || dgv1[j, i].Value.ToString().Contains("y"))
                    {
                        dgv1[j, i].Value = "31.12.2014";
                    }
                }
            }
 
 
/************************* Если дата больше сегодняшней - очищаем ячейку    ************************************************/
            DateTime date_now = DateTime.Now.Date;
           // string dta = "22.02.2014";
           // DateTime d_n = DateTime.ParseExact(dta, "dd.MM.yyyy", null);
            for (int j = 3; j < dgv1.ColumnCount - 1; j++)
 
                for (int i = 0; i < dgv1.RowCount; i++)
                {
                    {
                        string srav = dgv1[j, i].Value.ToString();
                        DateTime date = DateTime.ParseExact(srav, "dd.MM.yyyy", null);
                        TimeSpan time = date - date_now;
 
                        if (time > TimeSpan.FromDays(0))
                        {
                            dgv1[j, i].Value = " ";
                        }
                    }
                }
/********************* Удаляем строку, если она полностью пустая     ********************************************************/
 
            for (int i = 0; i < dgv1.RowCount; i++)
            {
                for (int j = 3; j < dgv1.Columns.Count - 1; j++)
                {
                    string srav = dgv1[j, i].Value.ToString();
                    if (srav == " ")
                    {
                        srav = "7777770";
                        srav = srav.Remove(0, 6);
                    }
                    if (srav.Contains("2014"))
                    {
                        srav = srav.Remove(0, 6);
                    }
                    z = Convert.ToInt32(srav);
                    t += z;
                    if (j == 14 && t == 0)
                    {
                        dgv1.Rows.RemoveAt(i);
                        t = 0;
                        i = -1;
                    }
 
                    if (j == 14)
                    {
 
                        t = 0;
                    }
                }
            }
           
/****************  Удаляем колонки, если они полностью пустые и окончательно формируем Грид ****************/
 
            for (int j = 3; j < dgv1.Columns.Count - 1; j++)
            {
 
 
                for (int i = 0; i < dgv1.RowCount; i++)
                {
                    string srav = dgv1[j, i].Value.ToString();
                    if (srav == " ")
                    {
                        srav = "7777770";
                        srav = srav.Remove(0, 6);
                    }
                    if (srav.Contains("2014"))
                    {
                        srav = srav.Remove(0, 6);
                    }
                    z = Convert.ToInt32(srav);
                    t += z;
                    if (i == dgv1.RowCount - 1 && t == 0)
                    {
                        dgv1.Columns.RemoveAt(j);
                        t = 0;
                        j = 3;
                    }
 
                    if (i == dgv1.RowCount - 1)
                    {
 
                        t = 0;
                    }
                }
 
            }
 
            dgv1.Columns["Код"].Visible = false;
            dgv1.Columns["nom"].Visible = false;
            for (int j = 3; j < dgv1.Columns.Count ; j++)
            {
                dgv1.Columns[j].Width = 80;
            }
            dgv1.DefaultCellStyle.BackColor = Color.LightYellow;
 
            dgv1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;//для переноса слов по ширине ячейки и регул.высоты
            dgv1.DefaultCellStyle.WrapMode = DataGridViewTriState.True;//
 
            button1.Enabled = false; //чтобы повторно не нажать на кнопку, а то долго грузится             
        }
0
Заблокирован
23.01.2014, 21:14
А если попробовать новый dgv каждый раз создавать?

В крайнем случае, можно попробовать всё это в отдельном потоке сделать.
По крайней мере, UI тогда тормозить не будет.
0
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
23.01.2014, 21:14
Все эти проверки с удалением и заменами можно переложить на SQL скрипт аксесса, попробуйте так и сделать.
0
1 / 1 / 3
Регистрация: 26.10.2013
Сообщений: 36
23.01.2014, 21:31  [ТС]
Спасибо за советы!
Буду пробовать.
Правда, на SQL не знаю как из строки удалить символ, потом преобразовать ее в дату, для сравнения с текущей и не выводить или выводить ее в грид.
С потоками тоже не силен - надо изучать....
0
Заблокирован
23.01.2014, 21:46
С потоками, вот простой пример. Изменение ProgressBar через отдельный поток
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.01.2014, 21:46
Помогаю со студенческими работами здесь

Как сделать, чтобы при повторном клике по кнопке обрывалось соединение и выключался Kaspersky?
Я сделал свою собственную обою для рабочего стола: хорошая картинка и кнопка, ну, как в Хоттабыче - все смотрели этот фильм. Потом зашел в...

При клике на ссылку в Хроме код срабатывает только при повторном клике
При клике на ссылку в Хроме код срабатывает только при повторном клике в мазили работает корректно с первого раза как исправить код ниже...

Сворачивание блока при повторном клике на него
Доброго дня! На сайте используется простейший аккордеон: $(function() { $('.accordeon-content').not('.active').hide(); ...

Как запретить при повторном клике скрытие дива?
Как для spoiler-body запретить повторение действия, чтобы он, когда выбран, не закрывался и не открывался бы снова? &lt;ul&gt; ...

При повторном клике на кнопку не срабатывает jquery событие
Здравствуйте, специалисты. Обращаюсь за помощью. При клике на кнопку &quot;Показать&quot; появляется скрытый текст. При клике на соседнем...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru