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的值了,在你还有其他的控件也绑定了这个数据源的时候,你在改变当前值的时候其他的控件也会随着改变,这个方法也是适用于编辑,添加等一系列方法。

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

 

 

 

 

 

你可能感兴趣的:(datagridview)