2010-05-01 5 views
0

Сценарий: у меня есть таблица базы данных, которая часто обновляется некоторыми службами.Обновление Datatable и DatagridView с базой данных Изменения по таймеру

У меня есть AC# Winforms Приложение, которое загружает эту таблицу в datagridview, связывая datatable как Datasource, затем я хочу добавить таймер, который каждые 10 секунд обновляет содержимое данных с последними изменениями в таблице базы данных ...

мне не нужно, чтобы обновить базу данных с DataTable изменений, но мне нужно обновить DataTable с последними изменениями в таблице базы данных, то есть обратный из обычно ....

Есть ли способ сделать это? Каков наилучший способ?

Я пытался с этим кодом:

private void ServiceTimer_Tick(object state) 
{ 
    OdbcConnection oCon = new OdbcConnection(); 
    oCon.ConnectionString = ConnectionStrings; 
    OdbcDataAdapter dp = new OdbcDataAdapter("SELECT * FROM table", oCon); 
    dsProva.Tables.Clear(); 
    dp.Fill(dsProva,"table"); 

    dataGridViewMessaggi.DataSource = dsProva.Tables["table"]; 
    dataGridViewMessaggi.Refresh(); 
} 

Но каждый таймер Tick я потерял выбор в DataGridView и Current Row ....

Является Там лучшее решение?

ответ

0

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

The CurrentRow, вы можете получить из BindingContext. Например

int lastRow = BindingContext[dsProva.Tables["table"]].Position; 

Затем восстановить текущую строку после подменой DGV

BindingContext[dsProva.Tables["table"]].Position = lastRow 

Конечно, это будет только обеспечить текущую строку указывает на тот же индекс строки, что если ваши данные изменились достаточно может быть не такой же строки данных, как раньше.

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

Смежные вопросы