我有一张表格可以显示另一张表格。
第一个表单上的Activated
事件当前正在刷新DataGridView
。
如何保留DataGridView
上的行选择?刷新DataGridView
会导致第一行被选中。
DataGridView
中的数据由以下内容刷新:
MyDataGridView.DataSource = getDataTableFromDb();
其中getDataTableFromDb()
返回DataTable
。
答案 0 :(得分:1)
要解决此问题,您可能需要一个BindingSource
- 这不是问题,因为没有任何理由没有问题。
您可以将BindingSource
控件拖放到表单的设计图面上,就像任何其他控件一样。
然后为绑定源创建DataTable
数据源,并使绑定源成为网格的数据源。
设置绑定源的代码非常简单:
bindingSource1.DataSource = getDataTableFromDb();
MyDataGridView.DataSource = bindingSource1;
此可能足以解决您的问题。 (我看到它在某些情况下有用)
如果仍未使用绑定源维护该位置,您现在可以使用Find
和Position
成员。
首先 - 在您重新绑定之前,您需要获取有关当前所选项目的一些独特信息。通常是数据库中的主键。
您可以从绑定源的Current
属性中获取此属性,例如:
DataRowView r = bs.Current as DataRowView;
var id = int.Parse(r.Row.ItemArray[0].ToString());
然后使用此ID,在重新绑定网格后,请执行以下操作:
int index = bs.Find("CustomerId", 3);
bs.Position = index;
上面的“CustomerId”属性是表示您使用的主键列的名称属性 - 数据表中的 。
需要注意的一件重要事情是,这只能起作用,因为您的数据源 - DataTable支持开箱即用。如果你改成类似BindingList的东西,你需要自己实现FindCore成员。