Обновить 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 шт):

Автор решения: Алексей
  1. Способ: Без очистки DataTable - это добавить dataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey. Но он очень тормознутый.

  2. Способ: Сохранить свойство 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;
}
→ Ссылка