关于DataGridView中当前行改变的事件

1、使用SelectionChanged事件

2、使用RowEnter事件

====================

很长时间以来,我都是倾向于使用SelectionChanged事件来捕捉DataGridView中当前行发生改变。

直到今天,我觉得这个不好,因为我在msdn上看到如下对SelectionChanged事件的描述:

This event occurs whenever cells are selected or the selection is canceled, whether programmatically or by user action. For example, this event is useful when you want display the sum of the currently selected cells.

无论什么时候只要单元格被选中,或者表格的选中项(selection)被取消,SelectionChanged事件就会被触发(就会发生),

无论这种改变是通过程序使然,还是通过用户操作,这个事件都会被触发。

举例来说,当你想要显示当前选中单元格的一个加总值时,这个事件是很有用的。(所以,可以看出这个事件,最佳应用的场景应该是这里)

When you change the value of the CurrentCell property, the SelectionChanged event occurs before the CurrentCellChanged event. Any SelectionChanged event handler accessing the CurrentCell property at this time will get its previous value.

当你改变了当前单元格属性的值时,SelectionChanged事件将会发生,然后CurrentCellChanged事件会发生。任何SelectionChanged事件处理方法,在这时(‘这时’指的是你修改了当前单元格值得时候)访问CurrentCell属性所获得的值是之前的值,而不是当前的值(也就是你改变后的值);


之所以说不好,不是说这个事件不可以达到反映当前行发生改变的这个事件,而因为这个事件不仅仅反映当前行改变,也包括了,其他一些可能选择项发生改变的情况,这些情况下,我的行可能根本没有改,只是在相同行中切换当前单元格而已。所以就会造成事件重复执行的问题;

加之,看到上面关于SelectionChanged事件应用举例的时候,也没有谈到用这个事件来捕捉行放生改变,这说明,这个事件在设计的时候就不是干这个事情用的,所以要改。


那么要改成什么?就是最开始看到的第二点列出的事件。

其实这个事件也不是今天才知道的事件,也是早就知道了的,为什么没有用呢?

因为在实际调试程序的过程中,发现,这个事件在捕捉当前行值得时候,捕捉不到正确的值,所以感觉这个事件不好用(你想,如果能够直接使用CurrentRow属性来访问是多么惬意的一件事!),直到今天我在MSDN上同时查看这个事件时,发现以下说明,我的想法开始变为倾向于使用RowEnter事件来捕捉行改变的事件了。那么我发现的说明是什么呢?其实也是很简单,如下:

This event occurs when the DataGridView is initially loaded, as well as when the user selects a row other than the current row.

当DataGridView被初始加载和用户选择了一个非当前行的其他行的时候,这个事件(RowEnter)会发生。(看到这里就知道,这个事件是设计用来反应行改变,而不是像SelectionChanged一样,虽然可以反应这种变化,但是它的设计初衷不是用来反应这个的)

This event occurs before the CurrentRow property is updated. To retrieve the index of the newly-entered row, use the DataGridViewCellEventArgs.RowIndex property within the event handler.

这个事件(RowEnter)发生后,CurrentRow属性才会被更新。所以在RowEnter事件处理方法中要使用 DataGridViewCellEventArgs.RowIndex来检索(retrieve)新选择行(newly-entered)的索引,而不是用CurrentRow属性进行检索。(你看,人家说的多清楚,一看就知道,这个事件确实设计用来反应行改变的)


看到这里我没有理由不用这个事件(RowEnter)来捕捉行改变了,因为这个事件即可以很及时的反应行发生改变这个事件,又可以很准确取到新行(newly-entered)的值;之前调试程序时,发现的当前行捕捉不到正确值得问题,是自己的问题(没有很好看过这个事件的MSDN)。


尽管我说用CurrentRow是一件很惬意的事,但是我也知道,在错综复杂的消息触发机制中,很难保证所有的属性都能及时反映或被更新(因为,你在这里更新了,可能到下个事件哪里又出现了其他的问题),所以接受不能用CurrentRow这个不惬意事实(说不定哪一天自己去写事件,也会这样,哈哈。。。。)

### 回答1: 在VB.NetDataGridView是一个非常常用的控件,用于显示和编辑数据。为了管理和响应用户与DataGridView的交互,可以使用事件和函数。 DataGridView有许多常用的事件,包括但不限于以下几个: 1. CellClick事件:当用户单击单元格时触发。可以使用事件参数获取单元格的索引和列索引,进而根据需要进相应操作。 2. CellValueChanged事件:当单元格的值改变时触发。可以使用事件参数获取单元格的索引和列索引,并可以通过DataGridView控件的相关属性获取新值和旧值,便于进后续处理。 3. RowValidating事件:在验证的数据之前触发。可以使用事件参数获取索引,并通过判断的数据是否合法来决定是否允许用户编辑。 4. CellFormatting事件:当单元格的格式需要显示时触发。可以使用事件参数获取单元格的索引和列索引,并通过编写代码设置特定单元格的样式或者自定义显示格式。 另外,通过编写函数,可以根据需要自定义DataGridView为和操作,增强其功能。常见的函数包括但不限于以下几个: 1. 添加数据:可以编写函数将数据添加至DataGridView,可以逐个添加,也可以通过一次添加多个数据。 2. 删除数据:可以编写函数将指定的或列数据从DataGridView删除。 3. 更新数据:可以编写函数根据特定条件更新DataGridView的数据。 4. 排序和筛选:可以编写函数实现对DataGridView数据的排序和筛选,以便用户更方便地查找和浏览数据。 总之,DataGridView事件和函数可以完美配合,使我们能够更加灵活地管理和操作这个控件,满足不同的业务需求。 ### 回答2: 在VB.netDataGridView是一个常用的控件,用于显示和编辑数据。它有很多事件和函数可以用来自定义数据的处理。下面是一些常见的DataGridView事件和函数的介绍: 1. CellClick事件:当用户单击单元格时触发此事件。可以使用此事件来执特定的操作,例如显示单元格内容、编辑单元格数据等。 2. CellValueChanged事件:当单元格的值发生改变时触发此事件。可以使用此事件来执特定的操作,例如更新数据库的数据、计算单元格间的关联数据等。 3. RowEnter事件:当用户切换到DataGridView的某一时触发此事件。可以使用此事件来执特定的操作,例如显示当前的详细信息、设置特定的样式等。 4. SelectionChanged事件:当用户选择DataGridView的单元格或时触发此事件。可以使用此事件来执特定的操作,例如获取选的数据、更新其他相关控件等。 除了这些事件之外,DataGridView还提供了一些常用的函数,例如: 1. Rows.Add()函数:用于向DataGridView添加新的。 2. Rows.Remove()函数:用于从DataGridView移除指定的。 3. Columns.Add()函数:用于向DataGridView添加新的列。 4. Columns.Remove()函数:用于从DataGridView移除指定的列。 5. Clear()函数:用于清空DataGridView的所有数据。 总之,在VB.net,我们可以利用这些事件和函数对DataGridView灵活的操作,实现不同的功能和交互效果。 ### 回答3: 在VB.NETDataGridView是一个非常常用的控件,可以用来显示和编辑数据集。它提供了一些常见的事件和函数,用于在操作之前、之和之后执相关代码。 1. 事件: - CellClick事件:当用户单击单元格时触发,可以通过处理程序来执相应的操作,比如获取单元格的值、修改单元格的内容等。 - CellValueChanged事件:当单元格的值发生变化时触发,可以用来保存修改后的数据到数据库或触发其他相关操作。 - RowHeaderMouseClick事件:当用户单击头时触发,可以通过处理程序来执对整数据的操作,比如删除、编辑等。 - SelectionChanged事件:当选择或单元格发生变化时触发,可以通过处理程序来更新其他控件或执相关操作。 - DataBindingComplete事件:当数据绑定完成后触发,可以用来对DataGridView一些初始化设置或调整。 2. 函数: - AddRow方法:用于向DataGridView添加新。 - RemoveRow方法:用于删除选定的。 - UpdateCell方法:用于更新指定单元格的值。 - ClearSelection方法:用于清除选或单元格。 - Sort方法:用于对DataGridView的数据进排序。 - GetCell方法:用于获取指定单元格的值。 通过处理这些事件和调用这些函数,我们可以方便地在DataGridView实现数据的展示、编辑和操作。同时,还可以根据业务需求自定义其他事件和函数,来实现更加复杂的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值