今天在写Windows From程序时,发现DataGridView在与DataTable透过BindingSource绑定,在DataGridView进行数据的排序后,DataGridView中的数据Index将会与DataTable的Index不一致,当选定的数据在进行修改后,因Index的不一致,导致在回存数据库的时候无法断定该回存哪一笔Row Data,这让我很苦恼,一度想把DataGridView的排序给关闭,不让使用者操作,不过想想,这也不是根本的解决之道,况且在我的程序中,这DataGridView的排序是必要的,不然会造成使用者操作的不方便....
在网络上找了好久,大部分都直接叫我关掉排序的功能....看到真是无言....,最后终于让我找到解决方法,方式如下:
DataRowView drv = dataGridView.SelectedRows[0].DataBoundItem as DataRowView;
int index = dataTable.Rows.IndexOf(drv.Row);
看程序看不懂吗?说明如下:
先利用DataRowView.SeletedRows找到目前选择的某一行数据,然后转换成DataRowView,在DataRowView中有一个属性叫做Row,其代表DataTable中的DataRow,最后再利用DataTable.rows.IndexOf()方法回传当前的Index。
如此一来,在DataGridView排序后,仍可顺利的取得目前编辑的资料在DataTable中的正确索引为何了!