【发布时间】:2010-02-24 22:05:02
【问题描述】:
我有一个 UI,它使用类型化数据集的 datagridviews / bindingsource / datatables 进行数据输入。数据集本身在 SQL 中被序列化为 varbinary(max)。 (即没有表适配器,后端架构)
我想限制用户可以在某些网格中输入的行数(数据用于填写 PDF 表单,我不希望他们输入的行数超过表单可以容纳的行数。)
我对 datagridview 进行了子类化,添加了 rowlimit 属性并尝试操作 AllUsertoAddRows 属性
Imports System.Windows.Forms
Public Class dgv
Inherits System.Windows.Forms.DataGridView
Private _Rowlimit As Int32
Public Property Rowlimit() As Int32
Get
Return _Rowlimit
End Get
Set(ByVal value As Int32)
_Rowlimit = value
End Set
End Property
Private Sub dgv_RowLeave(ByVal sender As Object, ByVal e As _
System.Windows.Forms.DataGridViewCellEventArgs) Handles Me.RowLeave
If Me.Rowlimit > 0 And Me.RowCount > Me.Rowlimit Then
MessageBox.Show("Maximun records (" & Me.Rowlimit & ") reached.")
Me.AllowUserToAddRows = False
Else
Me.AllowUserToAddRows = True
End If
End Sub
Private Sub dgvContainer_RowsRemoved(ByVal sender As Object, ByVal e As _
System.Windows.Forms.DataGridViewRowsRemovedEventArgs) Handles Me.RowsRemoved
If Me.Rowlimit = 0 Or Me.RowCount < Me.Rowlimit Then
Me.AllowUserToAddRows = True
End If
End Sub
End Class
我看到的行为是,即使用户试图离开网格,在离开最大行后也会出现消息框。我可能会丢失消息框并以其他方式处理通知,但我认为其他人可能想出了一些更复杂的东西来处理,只是导致尝试添加到许多记录以导航出网格到下一个 UI 控件。
如果有任何其他关于更优雅的方法来解决这个问题的建议,我们将不胜感激。
TIA
【问题讨论】:
标签: c# vb.net .net-3.5 datagridview