Dave Kreskowiak
Вау. С чего начать?..
Во-первых, вы создаете новый таймер для каждого щелчка по ячейке. ЭТО ДЕЙСТВИТЕЛЬНО ПЛОХО! Таймеры-это конечный ресурс в Windows, и вы не уничтожаете те, которые создаете, поэтому в конечном итоге у вас будут работать десятки таймеров, все они делают одно и то же!
Использование таймера все еще возможно, если и только если пользователь не получает возможности сделать какое-либо редактирование в сетке, которую вы пытаетесь обновить. Обновление его во время редактирования отменит редактирование пользователей, прямо в середине их выполнения.
Но использование таймера для обновления чего-то из базы данных имеет и обратную сторону-масштабируемость. Чем больше клиентов вы обновите по таймеру, тем больше запросов попадет в базу данных. Это приведет к тому, что клиенты просто наводнят базу данных запросами на одни и те же данные.
Кроме того, если вы извлекаете большое количество записей, чтобы засунуть их в DataGridView, вы увеличиваете нагрузку на базу данных и на своих клиентов. Привязка данных - это не легкая и быстрая операция.
Чтобы решить эту проблему, вам придется использовать пейджинговый или виртуальный режим в сетке. Это все усложняет.
Во-вторых, посмотрите на подпись обработчика событий timer_Tick, который вы пытаетесь подключить:
private void timer_Tick(object sender, DataGridViewCellEventArgs e)
Аргументы события для события элемента управления datagridview, не для события Tick таймера. Вот почему вы получаете исключение, которым вы являетесь. Событие Timer Tick просто использует общий аргумент EventArgs:
private void timer_Tick(object sender, EventArgs e)
Чтобы использовать таймер, вы должны поместить его в форму и дважды щелкнуть по нему, чтобы запустить обработчик событий для вас. Сделайте поиск данных в базе данных и обновление сетки оттуда. Запустите таймер, когда ваша форма будет показана, и вы закончите. Нет необходимости создавать новый таймер для каждого щелчка по ячейке.
Есть и другие варианты использования таймера, но код становится все более и более сложным, например, использование уведомлений SQL Server (старых), серверных компонентов, кэширования и подписок, служб, бла-бла - бла ... ничего особенного для "новой для этого" толпы.
Member 13581008
Спасибо за информацию. Я не прикрепляю таймер к каждому щелчку. Мне просто нужно обновить сетку. Итак, если вы не рекомендуете использовать таймер, можете ли вы указать мне, что я должен использовать?
Кроме того, я попробовал вашу рекомендацию по таймеру. Я прикрепил его к форме и отрегулировал настройку, а gridview по-прежнему не обновляется автоматически.
Dave Kreskowiak
Ваш код обновления должен выполнить запрос, чтобы получить все, что он отображает, а затем повторно привязать сетку к данным. Вы не показали код, который запускает таймер, ни код в обработчике тиков таймера, ни код, который выполняет извлечение и повторную привязку к сетке. Без этого никто не может сказать вам, что не так.
Другие методы удаляют большой объем работы для реализации, как в вашем приложении, так и на стороне SQL server. Я не могу ничего рекомендовать, потому что я ничего не знаю о вашем приложении, ваших требованиях, объеме данных, которые вы отображаете, количестве данных, с которыми вы работаете, частоте обновлений, вашем уровне квалификации ... ничего.
На данный момент, я бы сказал, чтобы все было просто, если у вас есть небольшое количество клиентов.