Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
2 / 2 / 5
Регистрация: 08.09.2014
Сообщений: 174

Сравнение dgv между собой с таймингом

26.11.2019, 10:25. Показов 2630. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Уважаемые знатоки, подскажите как правильно и и с наименьшим кодом организовать следующую задачу: есть 3 datagridview, есть 60 фамилий. Мне необходимо: если хотя-бы одна из 60 фамилий отсутствует в dgv1 или dgv2, то в dgv3 стартовал счетчик 00.00.00 посекундный. Раз в минуту данные обновляются, Если в dgv1 или dgv2 фамилия появилась, счетчик этой фамилии обнулялся.. Можно ли обойтись без объявления 60 переменных и привязки фамилий к переменной.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.11.2019, 10:25
Ответы с готовыми решениями:

Сравнение чисел между собой
Помогите пожалуйста, не могу додуматься как сравнить 4 числа A1, A2, A3, A4 (Не используя массив). 3 числа одинаковые и одно отличное и...

Сравнение строк между собой
Всем привет. Народ, у меня вот такой вопрос. Есть таблица (на скриншоте). Помогите пожалуйста составить правильный SQL-запрос, чтобы...

Сравнение файлов word между собой
Помогите пожалуйста с задачей: База данных в аксе, необходимо через интерфейс базы сравнить два файла word между собой (один считать...

28
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,725
Записей в блоге: 1
26.11.2019, 10:38
Задача наталкивает на мысль о Call-центре или, что ещё хуже, о центре обзвона клиентов для выманивания денежек.
Если это не так, то прошу прощения.
Цитата Сообщение от visak Посмотреть сообщение
Можно ли обойтись без объявления 60 переменных и привязки фамилий к переменной
Например добавить в dgv3 поле с временем ожидания. Т.е. как только в dgv3 появилась строка время ожидания = 0, а далее прибавляется на величину таймера. Как только время ожидания превышает допустимый порог Алярм!!!
0
2 / 2 / 5
Регистрация: 08.09.2014
Сообщений: 174
26.11.2019, 10:43  [ТС]
,нет это не так))))Не для обзвона) можно пожалуйста пример короткий вашего решения,если не сложно
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,725
Записей в блоге: 1
26.11.2019, 11:03
На форме должен быть Timer1, а строка DGV3 должна содержать столбец "Time".
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Timer1.Interval = 1000
        Timer1.Enabled = True
    End Sub
 
    Private Sub Timer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim row As DataGridViewRow
        For Each row In dgv3.Rows
            row.Cells("Time").Value += Timer1.Interval
            'здесь должна быть проверка того, что текущую строку нужно обрабатывать, 
            'т.е. Ваше условие на присутствие в dgv1 или dgv2
            If row.Cells("Time").Value > 60000 Then
                row.DefaultCellStyle.BackColor = Color.Red
            End If
        Next
    End Sub
Поле "Time" для простоты я сделал типа Integer, но можно повозится с преобразованием во время.
0
2 / 2 / 5
Регистрация: 08.09.2014
Сообщений: 174
26.11.2019, 11:49  [ТС]
Он увеличивает в dgv3 , в столбце time (10001000100001000.....) и так каждую секунду. А надо немного другое 00:00:01,00:00:02 - и так каждую секунду, только не поисоединение а вычисление=)
0
104 / 55 / 7
Регистрация: 02.07.2013
Сообщений: 314
26.11.2019, 14:39
Цитата Сообщение от visak Посмотреть сообщение
А надо немного другое 00:00:01,00:00:02 - и так каждую секунду, только не поисоединение а вычисление=)
VB.NET
1
row.Cells("Time").Value += TimeSpan.FromMilliseconds(Timer1.Interval)
0
2 / 2 / 5
Регистрация: 08.09.2014
Сообщений: 174
26.11.2019, 14:57  [ТС]
И все равно при появлении в dgv3 конкретной фамилии, счетчик на обнулится. А если его обнулять то обнулятся всё фамилии. Это не выход
0
104 / 55 / 7
Регистрация: 02.07.2013
Сообщений: 314
26.11.2019, 15:15
Цитата Сообщение от visak Посмотреть сообщение
Это не выход
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Dim row As DataGridViewRow
        Dim d As TimeSpan = TimeSpan.FromSeconds(6)
        For Each row In dgv3.Rows
            row.Cells("Time").Value += TimeSpan.FromMilliseconds(Timer1.Interval)
            'здесь должна быть проверка того, что текущую строку нужно обрабатывать, 
            'т.е. Ваше условие на присутствие в dgv1 или dgv2
            If row.Cells("Time").Value > d Then
 
                row.DefaultCellStyle.BackColor = Color.Red
                row.Cells("Time").Value = TimeSpan.FromMilliseconds(0)
            End If
        Next
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,725
Записей в блоге: 1
26.11.2019, 15:40
Большущий костыль, но вдруг ТСу поможет.
Условия:
в dgv3 должны быть два столбца "Time" (он может быть скрыт) типа DateTime и "Timer" типа String.
при добавлении или обновлении строки в dgv3 в поле "Time" необходимо записать текущую дату DateTime.Now.
Кликните здесь для просмотра всего текста
VB.NET
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
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Timer1.Interval = 1000
        Timer1.Enabled = True
    End Sub
 
    Private Sub Timer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim row As DataGridViewRow
 
        For Each row In dgv3.Rows
            'здесь должна быть проверка того, что текущую строку нужно обрабатывать, 
            'т.е. Ваше условие на присутствие в dgv1 или dgv2
            row.Cells("Timer").Value = GetInterval(row.Cells("Time").Value, DateTime.Now)
            If DateDiff(DateInterval.Second, row.Cells("Time").Value, DateTime.Now) > 60 Then
                row.DefaultCellStyle.BackColor = Color.Red
                'счётчик продолжает идти
            End If
        Next
    End Sub
 
    Private Function GetInterval(ByVal date1 As DateTime, ByVal date2 As DateTime) As String
        Dim wS, wM, wH As Long
        Dim tDate As DateTime = date1
 
        wH = DateDiff(DateInterval.Hour, tDate, date2)
        If wH > 0 Then
            tDate = tDate.AddHours(wH)
        End If
 
        wM = DateDiff(DateInterval.Minute, tDate, date2)
        If wM > 0 Then
            tDate = tDate.AddMinutes(wM)
        End If
 
        wS = DateDiff(DateInterval.Second, tDate, date2)
 
        Return wH.ToString & ":" & wM.ToString & ":" & wS.ToString
    End Function


Добавлено через 8 минут
Забыл, при обновлении состояния строки в dgv3 её закраску также нужно вернуть на "по умолчанию".
0
2 / 2 / 5
Регистрация: 08.09.2014
Сообщений: 174
26.11.2019, 18:19  [ТС]
Так,да он считает все четко. Но
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,725
Записей в блоге: 1
26.11.2019, 19:47
Поясните каким образом наполняются все три грида (вручную или привязкой), какие идентификаторы записей существуют.

Не по теме:

Почему вытягивать из Вас информацию надо.

0
2 / 2 / 5
Регистрация: 08.09.2014
Сообщений: 174
26.11.2019, 22:28  [ТС]
Uswer, Прошу прощения, был на работе, писал с телефона. В общем наверное все-таки правильно формулировать мысль так: у нас на работе есть 2 группы: одна занимается проверкой, другая регистрация: это и есть 2 грида, в 3 гриде у меня данные по каждому сотруднику(если его нет в первом или во втором гриде - значит он отсутствует на месте или его нет в работе). На данный момент у меня работает все следующим образом:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim secundomer As TimeSpan
 Dim secundomerG As Boolean = False
Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
 
        If secundomerG Then secundomer = TimeSpan.FromSeconds(secundomer.TotalSeconds + 1)
 
 For Each row9 As DataGridViewRow In DataGridView8.Rows
'если в dgv3 находит Иванова - форматирую значение
 If row9.Cells(0).Value.ToString() = "Иванов Иван" Then
         row9.Cells(2).Value = secundomer.Hours.ToString("00:") & secundomer.Minutes.ToString("00:") & secundomer.Seconds.ToString("00")
            End If
Next
end sub
 If row9.Cells(0).Value.ToString() = "Иванов Иван" Then 'Если в dgv3 есть Иванов секундомер активируется
                    secundomerGO1 = True
                End If
If row1.Cells(11).Value.ToString() = "Иванов Иван" Or row11.Cells(11).Value.ToString() = "Иванов Иван" Then
                    secundomer1 = TimeSpan.Zero ' если Иванова нет в dgv1 или в dgv2 то секундомер обнуляется
                    secundomerGO1 = False
                End If
И так для 60 фамилий (((
То есть по сути, что мне надо: если в dgv3 кто-то есть или появится после обновления - автоматически секундомер с "00:00:00" начинает свою активность пока присутствует в таблице, пока не покинет эту таблицу. А все кто dgv3 покидает - им счетчик обнулялся. Так как программа обновляется раз в минуту, т.е. раз в минуту фамилии в dgv3 могут меняться.
0
104 / 55 / 7
Регистрация: 02.07.2013
Сообщений: 314
27.11.2019, 02:30
То есть в третьем Датагриде у вас хранится список всех сотрудников и надо проверять по таймеру есть ли он в одном из Датагридов номер 1 и номер 2, и если он отсутствует запускается таймер для этого сотрудника. При времени отсутствия больше минуты строка должна подсветиться красным цветом?
0
2 / 2 / 5
Регистрация: 08.09.2014
Сообщений: 174
27.11.2019, 05:58  [ТС]
Бормалей, Не совсем, в 3 гриде список тех кто не в работе(база всех хранится в 4 гриде). Окраску делать не нужно в красный. Только запуск секундомера и обнуление на каждую фамилию отдельно
0
104 / 55 / 7
Регистрация: 02.07.2013
Сообщений: 314
27.11.2019, 07:13
Дата грид № 3 как заполняется? вручную? ФИО совпадают во всех четырех датагридах?
0
2 / 2 / 5
Регистрация: 08.09.2014
Сообщений: 174
27.11.2019, 07:18  [ТС]
Бормалей, 3 грид заполняется путем сравнения(если фамилии в dgv1 и в dgv2 нет в dgv4) то эти фамилии заполняют dgv3. ФИО совпадает во всех четырех.
0
104 / 55 / 7
Регистрация: 02.07.2013
Сообщений: 314
27.11.2019, 07:25
Цитата Сообщение от visak Посмотреть сообщение
если фамилии в dgv1 и в dgv2 нет в dgv4
Цитата Сообщение от visak Посмотреть сообщение
база всех хранится в 4 гриде
А это как?

Как я понял Вам необходимо:
Для ДГВ3
1. Функция проверки есть ли уже добавленная ФИО в ДГВ 1 или ДГВ 2
2. Если такой нет то увеличиваем время нахождения ФИО в ДГВ 3
Вопрос:

Если ФИО появляется в ДГВ1 или в ДГВ 2 то Счетчик обнуляется или сохраняется и в дальнейшем опять начинает прибавляться (что покажет время простоя сотрудника)? или ФИО удаляется из ДГВ 3?
0
2 / 2 / 5
Регистрация: 08.09.2014
Сообщений: 174
27.11.2019, 07:36  [ТС]
Бормалей, Если ФИО появляется в ДГВ1 или в ДГВ 2 то Счетчик обнуляется. Да,то есть я хочу видеть в дгв3 фактического время простоя. Ушел сотрудник На обед или разгильдяйничает,после того как он снова окажется в работе(появлегие его в дгв1 или дгв2) счетчик обнуляется. И если вдруг снова окажется в дгв3 таймер должен начать с нуля работать
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,725
Записей в блоге: 1
27.11.2019, 08:28
visak, Вы не ответили на мои вопросы о механизмах наполнения гридов и как записи можно идентифицировать.
Для оперирования данными нужен некий ключ для идентификации записей, фамилия не самый лучший вариант, т.к. могут быть однофамильцы (пускай не сейчас, а в будущем).
0
104 / 55 / 7
Регистрация: 02.07.2013
Сообщений: 314
27.11.2019, 08:38
Не знаю насколько верно я понял задачу но вот
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Function DGVCheck(DGV As DataGridView, FIO As String)
        For Each row In DGV.Rows
            If row.Cells("FIO").value = FIO Then
                Return True
            End If
        Next
        Return False
    End Function
 
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
 
 
        For Each row As DataGridViewRow In dgv3.Rows
            If Not DGVCheck(DGV1, row.Cells("Fio").Value) And Not DGVCheck(DGV2, row.Cells("FIO").Value) Then
                row.Cells("Time").Value += TimeSpan.FromMilliseconds(Timer1.Interval)
            Else
                'row.Cells("Time").Value = TimeSpan.FromMilliseconds(0) 'Это обнулит время записаное в Колонке Time 
            End If
 
        Next
    End Sub
И соответственно вам надо отслеживать уникальность записи при добавлении в ДГВ3
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.11.2019, 08:38
Помогаю со студенческими работами здесь

Переставить между собой элементы массива между собой, кроме максимального
Переставить между собой элементы массива между собой, кроме максимального, программа в СИ

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

Сравнение значение в ячейке DGV с текущей датой
Доброе время суток! На форме есть таблица, одна из колонок имеет тип Дата/время Необходимо сделать так, что бы при совпадении текущей...

Сравнение таблицы самой с собой
Добрый день, уважаемые форумчане! Прошу помощи в следующем вопросе: необходимо найти все записи у которых есть вышестоящий () и...

Cisco Packet Tracer. Как соединить удаленно между собой сети, установив между ними защищённое SSL соединение?
Помогите, пожалуйста, разобраться в задаче. Необходимо построить сеть предприятия, в составе которой имеются 3 здания, два из них находятся...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru