BindingSource的Position等于DataGridView的选中行方法

  以前没有用过微软自带DataGridView,都是用的Developer Express .NET v8.2第三方控件,那个好用啊,真的是很怀念哪些日子,毕竟它是收费的东西,废话不多说了,谈谈我实现的方法吧:

  在你的Form_Load方法中,填写如下代码:

//设置DataGridView选择模式
gvHistory.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

 BindingSource bs = new BindingSource();
DataGridView dgv
=new DataGridView ();
dgv.DataSource
= bs;

  在你的CellMouseClick和RowHeaderMouseDoubleClick事件中添加如下代码,;这个地方就是你要注意的地方了,设置BindingSource.Position关键就是你的BindingSource的数据源的形式是什么样的,我测试了两种格式,DataTable和BindingList<>,这两种的设置方式有所不同,分别对应BindingSource的Find和Indexof两个方法:

  BindingList形式:

代码
//返回的是BindingList<Car>的集合
bs.DataSource = DoorBll.GetBindingList(ID);
Car C = (Car)gvHistory.Rows[e.RowIndex].DataBoundItem;
//推荐使用此种方式
int a = bs.IndexOf(gvHistory.Rows[e.RowIndex].DataBoundItem);
//这种方式实际上调用的是BindingList的IndexOf()方法
// int b = bs.IndexOf(C); 
bs.Position
= a;
Car C2
=(Car) bs.Current;
 

  DataTable形式:

代码
 //返回的是DataTable的集合
bs.DataSource = DoorBll.GetDataTable(ID);
Car C = (Car)gvHistory.Rows[e.RowIndex].DataBoundItem;
int a = bs.Find("ID",C.ID);
bs.Position = a;
Car C2
=(Car) bs.Current;

  这样你就可以改变BindingSource.Position的值了,在你还有其他的控件也绑定了这个数据源的时候,你在改变当前值的时候其他的控件也会随着改变,这个方法也是适用于编辑,添加等一系列方法。

  这里只是抛砖引玉,希望对大家有所帮助!

作者:不老神仙
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/allanbolt/p/1648735.html