Обновить DataSource без очистки DataSet
Есть два метода: на заполнение таблицы (LoadData) и обновление таблицы после изменений (ReloadData).
private void LoadData()
{
dB_Order = new DB_Order();
dataAdapter = new MySqlDataAdapter("SELECT * FROM `tbl_orders`", dB_Order.getConnection());
dataSet = new DataSet();
dataAdapter.Fill(dataSet, "tbl_orders");
dataGridView1.DataSource = dataSet.Tables["tbl_orders"];
}
private void ReloadData()
{
dataSet.Tables["tbl_orders"].Clear();
dataAdapter.Fill(dataSet, "tbl_orders");
dataGridView1.DataSource = dataSet.Tables["tbl_orders"];
}
Вопрос: можно ли как-то обновить таблицу DataGridView без использования dataSet.Tables["tbl_orders"].Clear()? Т.к. с ним скролл кидает на первую строку.
Пробовал передавать строку которая сейчас активна, и после заполнения DataSource выбирать эту строку dataGridView1.Rows[row].Cells[0].Selected = true, но это тоже не лучше решение.
Ответы (1 шт):
Способ: Без очистки
DataTable- это добавитьdataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey. Но он очень тормознутый.Способ: Сохранить свойство
FirstDisplayedScrollingRowIndexперед загрузкойDataSourceи назначить его после загрузки.
private void ReloadData()
{
int row = dataGridView1.FirstDisplayedScrollingRowIndex;
dataTable.Clear();
dataAdapter.Fill(dataTable);
dataGridView1.DataSource = dataTable;
if (dataGridView1.Rows.Count != 0)
dataGridView1.FirstDisplayedScrollingRowIndex = row;
}