c# sync'绑定源和底层数据源

本文关键字:数据源 绑定 sync | 更新日期: 2023-09-27 18:15:22

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

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的底层数据源的行位置匹配。我需要一些建议,让绑定源和它的底层数据源同步,或者可能是一个更好的方式来完成这个任务。谢谢你的建议。

*编辑

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

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

不像我希望的那么漂亮,但似乎在做这项工作。仍然愿意接受其他建议。我对数据绑定很陌生

c# sync'绑定源和底层数据源

您可以使用另一个名为"RowID"的列,它对所有行都有唯一的编号。然后找到这个列的行,而不是行索引。如果你有帮助,请告诉我,并随时寻求进一步的帮助。