如何处理父窗口的刷新?

时间:2012-09-27 12:24:51

标签: .net winforms datagridview

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

第一个表单上的Activated事件当前正在刷新DataGridView

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

DataGridView中的数据由以下内容刷新:

MyDataGridView.DataSource = getDataTableFromDb();

其中getDataTableFromDb()返回DataTable

1 个答案:

答案 0 :(得分:1)

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

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

然后为绑定源创建DataTable数据源,并使绑定源成为网格的数据源。

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

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

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


如果仍未使用绑定源维护该位置,您现在可以使用FindPosition成员。

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

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