C#sync'ing bindingsource和底层数据源

时间:2013-05-27 05:30:01

标签: c# sorting datagridview datatable bindingsource

目前在数据绑定数据表中引用行数据时存在问题。 绑定配置如下: DataGridView => BindingSource =>数据表

datagridview允许多行选择和排序。

我有一个按钮,它根据所选的datagridview行启动一些方法:

ItemsBindingSource.DataSource = dataSets.Tables["ItemList"];

foreach(DataGridViewRow SelectedItem in datagridview1.SelectedRows)
{
     string SelectedItemName = SelectedItem.Cells[1].Value.ToString();
     int rowPosition = ItemsBindingSource.Find("Name",SelectedItemName);
     RunSomeMethod(dataSets.Tables["ItemList"].Rows[RowPosition]);
}

void RunSomeMethod(DataRow row)
{
    // run some code and modify the values of particular cells within the 
    // row and save the changes
}

我的问题是,当我对Datagridview进行排序时,所选项的rowPosition不再匹配BindingSource的基础数据源的行位置。我需要一些关于获取bindingsource和它的基础数据源以进行同步的建议,或者可能是完成此任务的更好方法。感谢任何建议。

*编辑

我已经意识到我可以根据主键值引用该行,例如:

foreach(DataGridViewRow selectedItem in datagridview1.SelectedRows)
{
int selectedItemPrimaryKey = selectedItem.Cells[0].value;
RunSomeMethod(dataSets.Tables["ItemList"].Rows.Find(selectedItemPrimaryKey));
}

不如我所希望的那么漂亮,但似乎正在做这项工作。仍然接受其他建议。我对数据绑定很新。

1 个答案:

答案 0 :(得分:1)

您可以使用另一个名为“RowID”的列,该列具有所有行的唯一编号。然后使用此列而不是行索引查找行。 如果你帮助我,请告诉我,并随时寻求进一步的帮助。