0

我有一个表格可以显示另一个表格。

Activated一个表单上的事件当前刷新了一个DataGridView.

如何保留行选择DataGridView?刷新DataGridView会导致第一行被选中。

中的数据DataGridView通过以下方式刷新:

MyDataGridView.DataSource = getDataTableFromDb();

哪里getDataTableFromDb()返回一个DataTable

4

1 回答 1

1

要解决这个问题,您可能需要一个BindingSource- 不是问题,因为没有任何理由不拥有一个。

您可以简单地将BindingSource控件拖到窗体的设计图面上,就像任何其他控件一样。

然后DataTable将绑定源设为数据源,并将绑定源设为网格的数据源。

设置绑定源的代码非常简单:

bindingSource1.DataSource = getDataTableFromDb();
MyDataGridView.DataSource = bindingSource1;

可能足以解决您的问题。(我已经看到它在某些情况下有效)


如果该位置仍未保持,那么使用绑定源您现在可以使用FindandPosition成员。

首先 - 在您重新绑定之前,您需要获取有关当前所选项目的一些独特信息。通常来自数据库的主键。

您可以从绑定源的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 成员。

于 2012-09-28T13:43:16.720 回答