Как вы обновляете datagridview в C # каждую минуту - PullRequest
4 голосов
/ 02 марта 2009

Я сейчас работаю над проектом на C #, который довольно прост.

У меня есть окно состояния, две кнопки и dataGridView.

Когда форма загружается, dataGridView заполнен правильно.

Я хотел бы обновлять эту таблицу каждые 45 секунд, чтобы отразить любые изменения в базе данных.

Я ищу предложения по технике для достижения этой цели. Я искал ясную информацию, но мне, кажется, чего-то не хватает.

Ответы [ 5 ]

7 голосов
/ 03 марта 2009
  1. Добавьте Timer элемент управления к вашей форме. (Это в категории компонентов)
  2. Установите для свойства Interval значение 45000 (значение представляет собой миллисекунды)
  3. Либо установите свойство Enabled таймера на True в конструкторе форм, либо где-нибудь в вашем коде.
  4. Добавить обработчик для события Tick таймера (это можно получить, дважды щелкнув по таймеру)
  5. Внутри обработчика Tick обновите dataGridView

Ваш обработчик будет выглядеть так:

private void timer1_Tick(object sender, EventArgs e)
{
    // Update DataGridView
}

Если вам по какой-то причине необходимо приостановить обновления, вы можете позвонить timer1.Stop(), чтобы остановить работу таймера, и использовать timer1.Start(), чтобы запустить его снова.

5 голосов
/ 03 марта 2009

Как и другие предложили, используйте таймер для запроса базы данных. Единственное, что я хотел бы добавить, это то, что когда вы повторно запрашиваете базу данных, не просто устанавливайте источник данных DataGridView в новую таблицу. Скорее, объединить его с существующей таблицей. Причина этого заключается в том, что если пользователь находится в середине сетки, например, просматривая конкретную строку, если вы переустановите источник данных в новую таблицу, вся сетка обновится, и они потеряют свое место. Раздражает, как ад! Однако если вы объедините , это будет беспрепятственно для пользователя.

DataTable.Merge

При использовании метода Merge следует помнить, что для таблицы необходим первичный ключ. Дважды проверьте, чтобы убедиться, что сам DataTable имеет первичный ключ. Не всегда он вытаскивает его из базы данных. Вам может потребоваться сделать что-то вроде:

table.PrimaryKey = new DataColumn[] {table.Columns["ID"]};
1 голос
/ 02 марта 2009

Вы можете создать Таймер , который срабатывает каждые 45 секунд, и обновить свой пользовательский интерфейс из обработчика событий.

1 голос
/ 02 марта 2009

Используйте элемент управления таймером, а затем выполняйте обновления с необходимыми вам приращениями.

0 голосов
/ 25 сентября 2009

Вы имеете в виду, что я должен снова связать datagridview в обработчике событий Timer?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...