У меня есть пользовательский интерфейс, который использует datagridviews / bindingsource / datatables типизированного набора данных для ввода данных. Сам набор данных сериализуется в varbinary (max) в SQL. (т. е. нет адаптера таблицы, схема бэкэнда)
Я хотел бы ограничить количество строк, которые пользователь может ввести в некоторые сетки (данные используются для заполнения форм PDF, и я не хочу, чтобы они вводили больше строк, чем могут вместить формы.)
Я переклассифицировал представление данных, добавил свойство 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
Поведение, которое я вижу, состоит в том, что окно сообщения появляется после выхода из строки max, даже когда пользователь пытается покинуть сетку. Я могу потерять окно сообщения и работать с уведомлением другим способом, но я подумал, что кто-то другой, возможно, придумал что-то более сложное для обработки, просто вызвав попытку добавить много записей для перехода из сетки к следующему элементу управления пользовательского интерфейса.
Буду признателен за любые другие предложения относительно более элегантного подхода к этому.
1012 * ТИА *