惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
A
About on SuperTechFans
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
U
Unit 42
WordPress大学
WordPress大学
Y
Y Combinator Blog
罗磊的独立博客
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog
腾讯CDC
博客园 - 叶小钗
Stack Overflow Blog
Stack Overflow Blog
Engineering at Meta
Engineering at Meta
Microsoft Security Blog
Microsoft Security Blog
GbyAI
GbyAI
V
V2EX
雷峰网
雷峰网
H
Hackread – Cybersecurity News, Data Breaches, AI and More
S
SegmentFault 最新的问题
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - 蒋雷军

在2015中使用V12版本的ReportView控件,会导致winform窗体不能正常打开 小心DriveInfo类IsReady属性的较大延迟问题 Overloads和Overrides在元属性继承上的特性 如何使rdlc报表的表头在每一页都显示 无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型,原因为没有注册类 引用账户当前已锁定,且可能无法登录”--问题的解决方法(转载) win7访问windows server 2003服务器出现未知的用户名或者错误的密码(转载) TabControl控件中TabPage的显示和隐藏 参数计数不匹配,未处理System.Reflection.TargetParameterCountException 设定了自定义属性,来控制控件的宽度或高度,但数据会不正常 如何使一个你没有源代码的DLL文件变为强命名的DLL Windows 7如何限制运行特定的应用程序(转载) 怎么通过应用程序控制策略限制软件运行?(转载) 32位程序在64位电脑下运行, 如何让圆珠笔起死回生 密度采集调整 MIME类型大全 C# 构造函数如何调用父类构造函数或其他构造函数 结合RibbonControl设计MDI窗体,在子窗体关闭后,顶部显示额外的控制栏残影
NewRowNeeded和UserAddedRow事件以及RowsAdded的区别使用
蒋雷军 · 2015-11-12 · via 博客园 - 蒋雷军

NewRowNeeded事件当 VirtualMode 属性为 true 时,将在用户定位到 DataGridView 底部的新行时发生,适合给新行建立一些默认数据和按规则应该产生的数据,但此时不推荐添加新数据到后台数据表中。因为用户操作有太多的变数,可以把产生的默认值直接赋值给一个临时初始数据对像即可,在用户触发UserAddedRow事件后,再赋值到后台数据也不迟

  1. Private pInitData As OuterExtendItem
  2. Private Sub xDataGridView_NewRowNeeded(sender As Object, e As System.Windows.Forms.DataGridViewRowEventArgs) Handles xDataGridView.NewRowNeeded
  3. If (mHalt) Then
  4. Return
  5. End If
  6. pInitData = New OuterExtendItem()
  7. pInitData.mTitle = ""
  8. pInitData.mValue = ""
  9. End Sub

UserAddedRow事件是在编辑新行时触发,此时适合添加数据到后台数据表中

如例:

  1. Private Sub xDataGridView_UserAddedRow(sender As Object, e As System.Windows.Forms.DataGridViewRowEventArgs) Handles xDataGridView.UserAddedRow
  2. If (mHalt) Then
  3. Return
  4. End If
  5. If (_ExtendList Is Nothing) Then
  6. Return
  7. End If
  8. If (pInitData IsNot Nothing) Then
  9. _ExtendList.addNotEvent(pInitData)
  10. pInitData = Nothing
  11. End If
  12. End Sub

//参考的数据显示代码:

  1. Private Sub xDataGridView_CellValueNeeded(sender As Object, e As System.Windows.Forms.DataGridViewCellValueEventArgs) Handles xDataGridView.CellValueNeeded
  2. If (mHalt) Then
  3. Return
  4. End If
  5. If (e.RowIndex < 0 OrElse e.RowIndex > _ExtendList.Count) Then
  6. Return
  7. End If
  8. If (e.RowIndex = _ExtendList.Count AndAlso pInitData IsNot Nothing) Then
  9. '显示新行的代码
  10. Select Case e.ColumnIndex
  11. Case xColumnTitle.Index
  12. e.Value = pInitData.mTitle
  13. Case xColumnValue.Index
  14. e.Value = pInitData.mValue
  15. End Select
  16. Else
  17. With _ExtendList
  18. Select Case e.ColumnIndex
  19. Case xColumnTitle.Index
  20. e.Value = .Item(e.RowIndex).mTitle
  21. Case xColumnValue.Index
  22. e.Value = .Item(e.RowIndex).mValue
  23. End Select
  24. End With
  25. End If
  26. End Sub
  1. Private Sub xDataGridView_CellValuePushed(sender As Object, e As System.Windows.Forms.DataGridViewCellValueEventArgs) Handles xDataGridView.CellValuePushed
  2. If (mHalt) Then
  3. Return
  4. End If
  5. If (e.RowIndex < 0 OrElse e.RowIndex >= _ExtendList.Count) Then
  6. Return
  7. End If
  8. With _ExtendList(e.RowIndex)
  9. Try
  10. Select Case e.ColumnIndex
  11. Case xColumnTitle.Index
  12. .mTitle = e.Value
  13. Case xColumnValue.Index
  14. .mValue = e.Value
  15. End Select
  16. .raiseValueChangedEvent(_ExtendList, EventArgs.Empty) //触发列表变化事件
  17. Catch exp As Exception
  18. MyHub.mBase.mDebugLog.writerError(Me, exp)
  19. Finally
  20. End Try
  21. End With
  22. End Sub
  1.   '列表变化事件,此处只要根据实际数据,设置行数即可
  2. Private Sub listChanged(sender As Object, ByVal e As DBListChangedEventArgs(Of OuterExtendItem))
  3. If (Me.InvokeRequired) Then
  4. Me.BeginInvoke(New EventHandler(Of DBListChangedEventArgs(Of OuterExtendItem))(AddressOf listChanged), New Object() {sender, e})
  5. Else
  6. xDataGridView.RowCount = _ExtendList.Count + 1 //行数+1行
  7. xDataGridView.Refresh()
  8. End If
  9. End Sub

RowsAdded事件,此事件是指在表格增加新行时触发,在初始化数据增加新行和后期编辑增加新行时都会触发此事件,而UserAddedRow事件一般是指在编辑阶段由用户操作触发的增加新行事件,二者有所区别,UserAddedRow事件使用率会比较高一点,RowsAdded事件适用于产生一些根据绑定数据需要额外显示的信息时。