为什么更新数据源时会自动选择DataGridView中的行?

时间:2018-10-17 08:34:50

标签: c# winforms datagridview datatable

我有一个DataTable充当DataGridView的数据源

private readonly DataTable _processTable = new DataTable();

ProcessDataGrid.DataSource = _processTable;

我有一个填充此DataTable的方法(这样做时将填充DataGridView)

private void PopulateDataTable()
{
    var processes = Process.GetProcesses();

    foreach(var process in processes)
    {
        _processTable.Rows.Add(process.ProcessName);
    }
}

我还有一个按钮,按下该按钮时会呼叫PopulateDataTable

private void RefreshButton_Click(object sender, System.EventArgs e)
{
    _processTable.Rows.Clear();

    // Refresh the process list

    PopulateDataTable();
}

单击RefreshButton后,数据源将被清除并正确更新,但是,它将在列表的一半位置选择一行,并滚动到DataGridView中的该值。

我想防止这种情况的发生,因此,当单击按钮时,数据源将像当前正在执行的那样进行更新,但是,无行会自动滚动到DataGridView中(用户相对于滚动条的当前位置)不会改变。)

我该怎么做?

1 个答案:

答案 0 :(得分:1)

在刷新DataTable之前,记下先前选择的行索引。然后刷新后再次选择同一行。

提示:dataGridViewControl.CurrentRow是只读属性,因此请使用dataGridViewControl.CurrentCell来读取和设置当前行。确保执行检查以查看CurentCell属性是否为null,并且要选择的行索引也不超出范围。