确定Datagridview光标显示行问题 (对DataGridView某行进行修改之后,保证光标显示仍在选中行上)
来源:互联网 发布:淘宝电视机为什么便宜 编辑:程序博客网 时间:2024/05/02 00:52
问题:
对DataGridView某行进行修改之后,保证光标显示仍在选中行上?
现实问题: 当前的开发中遇到Datagridview的操作,在对Datagridview中单选行进行操作之后,要回到Datagridview显示界面,但是显示选中行总是在第一行,这样的话,当数据库中数据行太多的时候,显示太多,选择行也许就修改后客户就找不到自己修改的那一行了解决方案:搜索资料:1.得到选中行的行号 int i = DataGridView1.CurrentCell.RowIndex //当前行号 int j = DataGridView1.CurrentCell.ColumnIndex //当前列号 2.指定DataGridView的滚动框位置 DataGridView1.FirstDisplayedScrollingRowIndex = 0 DataGridView1.FirstDisplayedScrollingColumnIndex = 0 为了解决这个问题,我们可以将Datagridview的滚动块位置设置为修改行的那个位置。这样在Datagridview显示的第一行就是客户操作行了。具体做法:在选中要修改行的时候,即可获取选中行的Index,方法 (int i = DataGridView1.CurrentCell.RowIndex)在修改完成后,指定滚动块的位置(DataGridView1.FirstDisplayedScrollingRowIndex = i))注:这几天国庆放假中,等上班了再验证下,是否可行。搜索资料:3.在还没有去实现并继续搜索资料中发现,有人提出一个新问题,那就是:在如上操作后显示的第一行就是我们开始选中的那一行,但是之后 取 CurrentRows 时候会出现和selected rows不同的行。提出的解决方案为:DataGridView1.Rows(i).Selected = True 设置能保证选中行; DataGridView1.CurrentCell = DataGridView1.Rows(i).Cells(0) 并且滚动条也会自动的滚动。 DataGridView1.Rows(0).Selected = False DataGridView1.Rows(i).Selected = True DataGridView1.FirstDisplayedScrollingRowIndex = i 还有人提到解决方法,但是没去实践,所以不知道具体会是怎么样,所以先记录下来 (dataGridView1[columnIndex, rowIndex].Selected = true; dataGridView1.CurrentCell = dataGridView1[columnIndex, rowIndex]; // 强制 显示)今天上班,经过调试,发现这几位仁兄把问题都提到了总结下: int i = DataGridView1.CurrentCell.RowIndex //得到该行的索引号 dataGridView1[columnIndex, i].Selected = true //光标移至该行 DataGridView1.FirstDisplayedScrollingRowIndex = i //将滑块移动到该行介于,如果在上面操作之后仍要对表格进行操作,比如通过DataGridView1.CurrentCell 查找该行的数据列,那么我们必须做以下操作,因为这个时候真出现了以上那个问题 CurrentRows 时候会出现和selected rows不同的行 dataGridView1.CurrentCell = dataGridView1[columnIndex, i]; // 强制显示该行 int i = DataGridView1.CurrentCell.RowIndex //得到该行的索引号 dataGridView1.Rows[0].Selected = false //关闭0行的光标显示 dataGridView1.CurrentCell = dataGridView1[columnIndex, i]; // 强制将光标指向i行 dataGridView1.Rows[i].Selected = true //光标显示至i行 DataGridView1.FirstDisplayedScrollingRowIndex = i //将滑块移动到该行注:columnIndex为任一列序号,如(0,1,2,3……)但要确保这一列是显示的不是隐藏的列,要不然会报错。。。。。通过以上语句,将光标强制转到该行,(大概意思应该是这样吧)这样就可以准确的取到该行的数据了。经以上操作,我们看到显示行确实是我们要的那一行,但是第一行也有显示了,这样就有两行是选择行,所以我就添加了一下第二行代码,关闭了第一行的显示;之后呢?当我们仔细看前面的光标指向,就是行最前面的箭头还是指向第一行的,所以我们还得做强制转移光标的行为,如第三行代码。 再次更新,滑块的初始位置我们也可以获取到,要保证显示位置一致的话,我们可以将原来滑块位置赋给当前位置就好了添加一行代码 int FirstRowIndex = DataGridView1.FirstDisplayedScrollingRowIndex//得到该行的索引号后面确定滑块位置的时候,把这个值赋给他就好了 DataGridView1.FirstDisplayedScrollingRowIndex = FirstRowIndex ;//这是最核心的部分 再次更正: 咳,该死的C#什么都封装好了,原以为是这样,原来不需要最后移动滑块,开始光标的定位已经将滑块移动到要显示的行了,第一行就是我们要显示的行了。所以,如果只是添加或者删除,就不需要最后一行代码了。但是选中修改行后,要不让他滑动到第一行的话就用下面的方法吧:找到初始滑块位置,在最后再赋还给滑块就好了,那么原来数据行显示在哪,更新后还是显示在那。。。再一次完善: 添加,修改,删除时用的方法各不相同,考虑到各种情况的发生。 switch(条件) { case Add: if (dgv.RowCount > 0) { dgv.Rows[0].Selected = false; dgv.CurrentCell = dgv[k, dgv.RowCount - 1]; dgv.Rows[dgv.RowCount - 1].Selected = true; //dgv.FirstDisplayedScrollingRowIndex = dgv.RowCount - 1; } break; case Update: { dgv.Rows[0].Selected = false; dgv.CurrentCell = dgv[k, RowIndex]; dgv.Rows[RowIndex].Selected = true; dgv.FirstDisplayedScrollingRowIndex = FirstRowIndex; } break; case Delete: if (dgv.RowCount > 0) { if (RowIndex > 0 && (RowIndex - 1) < dgv.RowCount) { dgv.Rows[0].Selected = false; dgv.CurrentCell = dgv[k, RowIndex - 1]; dgv.Rows[RowIndex - 1].Selected = true; }//dgv.FirstDisplayedScrollingRowIndex = RowIndex - 1; else if (RowIndex <= 0) { dgv.Rows[0].Selected = true; } else { dgv.Rows[0].Selected = false; dgv.CurrentCell = dgv[k, dgv.RowCount - 1]; dgv.Rows[dgv.RowCount - 1].Selected = true; } } break; default: break; }
- 确定Datagridview光标显示行问题 (对DataGridView某行进行修改之后,保证光标显示仍在选中行上)
- 对DataGridView某行进行修改之后,保证光标显示仍在选中行上?
- 对DataGridView某行进行修改之后,保证光标显示仍在选中行上?
- 确定Datagridview光标显示行问题
- C# DataGridView 光标选中某一行
- Datagridview 显示当前选中行
- dataGridView选中行显示图片
- datagridview 行随光标变色
- C# DataGridView显示行号、行选中
- DataGridView全选的时候第一行没有选中,光标移动到其他行才会显示选中
- c#中datagridview对选中的多行进行批量删除的代码示例
- dataGridView中设置光标到指定的行
- 根据Datagridview选中的行的数据,显示在对应的栏位中
- [VB.NET]请问怎么把datagridview某行的内容显示在textbox上?
- C# 关于在datagridview选中行上添加右键
- 固定DataGridView当前显示行
- DataGridView右键选中行
- DataGridView整行选中
- 浅入分析和Linux内核相关的文件夹/proc和/sys
- 编译和链接 - vc2008 转 vc2005
- 在学dwr的时候,在浏览器上运行部署好的程序结果出现“not found”,解决如下
- C/C++与Matlab engine 混合编程
- 神马是XHR?
- 确定Datagridview光标显示行问题 (对DataGridView某行进行修改之后,保证光标显示仍在选中行上)
- 在Tomcat下,调整提交的HTTP POST的大小以及堆空间
- ubuntu10.4下64位编译环境下安装oracle instant client
- HBase参考资料
- 控件自适应窗体
- Effective C#阅读笔记-6Prefer Immutable Atomic Value Types不可变值类型
- RMQ问题的Fischer-Heun算法(直接方法)
- POJ 1015 Jury Compromise
- ABAP面向对象事件处理-简单实例