对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]; // 强制显示该行
咳,该死的C#什么都封装好了,原以为是这样,原来不需要最后移动滑块,开始光标的定位已经将滑块移动到要显示的行了,第一行就是我们要显示的行了。所以,如果只是添加或者删除,就不需要最后一行代码了。
但是选中修改行后,要不让他滑动到第一行的话就用下面的方法吧:
找到初始滑块位置,在最后再赋还给滑块就好了,那么原来数据行显示在哪,更新后还是显示在那。。。
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;
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显示界面,但是显示选中行总是在第一行,这样的话,当数据库中数据行太多的时候,显示太多,选择行也许就修改后客户就找不到自己修改的那一行了
1、如果有超过一屏的数据,想通过关键字查找到相关记录,然后再定位之,做法如下:
遍历所有行,把某单元格的值和关键字对比,找到后清除所有选择行,然后把当前行设为选择,然后把grid的CurrentCell设置为当前行的某个可见单元格即可,效果就会自动跳到定位好的
行上
。
示例代码:
string InputStr=txtFindSp.Text;
foreach(DataGrid
现实生活中,在医院、汽车、银行等窗口单位的时候,工作人员很少用到鼠标,他们操作键盘的速度甚至比程序员敲代码还要快...在给这些单位做软件系统的时候,他们对UI界面的要求并不高,但是要求用户操作舒适度要非常好。
------------.
将取消方法放在窗体的Load事件中,如果刷新数据后有一次被
选中
,可以在加载数据源再次调用方法。这样一来,不论是启动窗体
之后
还是重新更新数据,都不会有默认
选中
行了。
代码就是这几个,只要放对地方,其中任意一个都能实现取消
选中
的效果。
dataGridView
1.ClearSelection();
//
dataGridView
1.CurrentCell = null;
//
dataGridView
1.R...
16.
DataGridView
选择的部分拷贝至剪贴板
17.
DataGridView
粘贴
18.
DataGridView
单元格上ToolTip表示设定(鼠标移动到相应单元格上时,弹出说明信息)
DataGridView
控件用法合集(四)
19.
DataGridView
中的ContextMenuStrip属性
20.
DataGridView
指定滚动框位置
21.
DataGridView
手动追加列
22.
DataGridView
全体分界线样式设置
23.
DataGridView
根据单元格属性更改
显示
内容
24.
DataGridView
新追加行的行高样式设置る
25.
DataGridView
新追加行单元格默认值设置
DataGridView
中输入错误数据的处理(五)
26.
DataGridView
单元格数据错误标签表示
27.
DataGridView
单元格内输入值正确性判断
28.
DataGridView
单元格输入错误值事件的捕获
DataGridView
控件用法合集(六)
29.
DataGridView
行排序(点击列表头自动排序的设置)
30.
DataGridView
自动行排序(新追加值也会自动排序)
31.
DataGridView
自动行排序禁止情况下的排序
32.
DataGridView
指定列指定排序
DataGridView
控件用法合集(七)
33.
DataGridView
单元格样式设置
34.
DataGridView
文字表示位置的设定
35.
DataGridView
单元格内文字列换行
36.
DataGridView
单元格DBNull值表示的设定
37.
DataGridView
单元格样式格式化
38.
DataGridView
指定单元格颜色设定
39.
DataGridView
单元格文字字体设置
40.
DataGridView
根据单元格值设定单元格样式
DataGridView
控件用法合集(八)
41.
DataGridView
设置单元格背景颜色
42.
DataGridView
行样式描画
43.
DataGridView
显示
行号
44.
DataGridView
焦点所在单元格焦点框不
显示
的设定
DataGridView
控件用法合集(九)
45.
DataGridView
中
显示
选择框CheckBox
46.
DataGridView
中
显示
下拉框ComboBox
47.
DataGridView
单击打开下拉框
48.
DataGridView
中
显示
按钮
49.
DataGridView
中
显示
链接
50.
DataGridView
中
显示
图像
DataGridView
控件用法合集(十)
51.
DataGridView
编辑中单元格控件取得
52.
DataGridView
输入自动完成
53.
DataGridView
单元格编辑时键盘KEY事件取得
54.
DataGridView
下拉框(ComboBox)单元格编辑时事件取得
55.
DataGridView
下拉框(ComboBox)单元格允许文字输入设定
DataGridView
控件用法合集(十一)
56.
DataGridView
根据值不同在另一列中
显示
相应图片
57.
DataGridView
中
显示
进度条(ProgressBar)
58.
DataGridView
中添加MaskedTextBox
DataGridView
控件用法合集(十二)
59.
DataGridView
中Enter键按下焦点移至旁边的单元格
60.
DataGridView
行集合化(Group)
DataGridView
Row selectedRow =
dataGridView
1.Rows[selectedRowIndex];
// 克隆
选中
的行,并将其添加到
DataGridView
中
dataGridView
1.Rows.Add(selectedRow.Clone());
// 将新增的行插入到
选中
行的下方
int newRowIdx = selectedRowIndex + 1;
dataGridView
1.Rows[newRowIdx].Cells[0].Value = ""; // 可以根据需要设置新行的初始值
这段代码假设您的
DataGridView
控件名为
dataGridView
1。首先,我们获取当前
选中
行的索引,然后使用 Clone 方法克隆
选中
行的数据,并将克隆得到的行添加到
DataGridView
中。最后,将新增的行插入到
选中
行的下方,并可以设置新行的初始值。
请注意,此代码只适用于
选中
单个单元格并且该单元格所在的行为完整行的情况。如果您需要处理多个单元格或部分行的情况,则需要
进行
适当的
修改
。