重载DataGridView后如何保存位置

bob*_*bik 16 c# datagridview winforms

这是我的代码:

        private void getData(string selectCommand)
    {
        string connectionString = @"Server=localhost;User=SYSDBA;Password=masterkey;Database=C:\data\test.fdb";

        dataAdapter = new FbDataAdapter(selectCommand, connectionString);
        DataTable data = new DataTable();
        dataAdapter.Fill(data);
        bindingSource.DataSource = data;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        getData(dataAdapter.SelectCommand.CommandText);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        dataGridView1.DataSource = bindingSource;
        getData("SELECT * FROM cities");
    }
Run Code Online (Sandbox Code Playgroud)

在按钮1单击重新加载数据后,单元格选择跳到第一列并重置滚动条.如何保存DataGridView的位置?

ovi*_*ile 35

这是我提出的解决方案.如果行数没有很大变化,则不需要选择行并在刷新后将滚动条放回到同一区域.

int saveRow = 0;
if (dataGridView1.Rows.Count > 0 && dataGridView1.FirstDisplayedCell != null)
    saveRow = dataGridView1.FirstDisplayedCell.RowIndex;

dataGridView1.DataSource = dataTable1;

if (saveRow != 0 && saveRow < dataGridView1.Rows.Count)
    dataGridView1.FirstDisplayedScrollingRowIndex = saveRow;
Run Code Online (Sandbox Code Playgroud)


Dav*_*cre 5

int FirstDisplayedScrollingRowIndex = this.dgvItems.FirstDisplayedScrollingRowIndex; //Save Current Scroll Index
int SelectedRowIndex = 0;
if (this.dgvItems.SelectedRows.Count > 0) SelectedRowIndex = this.dgvItems.SelectedRows[0].Index; //Save Current Selected Row Index

//REFRESH DataGridView HERE

if ((FirstDisplayedScrollingRowIndex >=0) && ((this.dgvItems.Rows.Count -1) >= FirstDisplayedScrollingRowIndex)) this.dgvItems.FirstDisplayedScrollingRowIndex = FirstDisplayedScrollingRowIndex; //Restore Scroll Index
if ((this.dgvItems.Rows.Count -1) >= SelectedRowIndex) this.dgvItems.Rows[SelectedRowIndex].Selected = true; //Restore Selected Row
Run Code Online (Sandbox Code Playgroud)


Jav*_*ier 3

您可以在启动 getData 之前使用 保存选定的行DataGridView.CurrentRow,并在加载网格后选择该行。

这个问题中,我回答了如何在 DataGridView 中选择特定行。


编辑:我认为你正在使用 WinForms

Edit2:那么滚动条呢?

您也可以使用此语句保存第一个可见行索引

DataGridView.FirstDisplayedCell.RowIndex
Run Code Online (Sandbox Code Playgroud)