做了一个程序要用到DataGridView,然后再刷新的时候由于光标会自动跳到序号为0的行,导致有的时候看数据十分不爽。。。
因为用的DataGridView是绑在一个DataTable上的,所以没法往刷新函数里面写。。。
一开始是想找找有没有一个刷新事件,然后在刷新事件里面写,但是因为没找到那个事件,所以宣告放弃。
但是后来一想,因为DataTable的改变导致了DataGridView的刷新,所以可以在改变DataTable的方中控制DataGridView-_-||(因为都是界面,所以DataTable,DataGridView都在一个Form类里面,所以可以互相调,别吐槽结构粗糙哈~)
因为要看某一行,所以鼠标肯定要点那一行,所以用一个字段记录鼠标点在哪一行,用DataGridView中的CellClick这个事件就行。
protected virtual void DGV_Click(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0) DGVRowIndex = e.RowIndex; }如果点的是列头(就是会排序的那个地方)那么e.RowIndex的值是-1,所以要加一下判断~ e.RowIndex就是鼠标单击的那一行的序号,用DGVRowIndex记录。
然后在改变DataTable的方法中添加就行了
if (dgv.Rows.Count >= DGVRowIndex) dgv.CurrentCell = dgv.Rows[DGVRowIndex].Cells[0];dgv是一个DataGridView的对象,CurrentCell能用来设置处于活动的单元格,把它变成刚才点的那行第一个单元格就行。
至于那个if是为了防止由于数据源删除了一些行,导致现在的总行数比之前鼠标点的行的序号要小而产生的异常。。。
如果想更精确一些,就用e.ColumnIndex来获取刚才点的是第几列,然后把上面Cells[0]中的0替换成刚才的列的序号就行了~
这样刷新之后就不会跳了~
关于C#的DataGridView刷新光标会跳的解决~,布布扣,bubuko.com
原文:http://blog.csdn.net/st_kalecgos/article/details/24132317