我有一个UI,它使用类型数据集的datagridviews / bindingsource / datatables进行数据输入。数据集本身在SQL中序列化为varbinary(max)。 (即没有tableadapter,后端架构)
我想限制用户可以在某些网格中输入的行数(数据用于填充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控件。 / p>
非常感谢任何其他建议,以更优雅的方式来解决这个问题。
TIA
答案 0 :(得分:0)
检查RowsAdded事件处理程序中的行数怎么样?
另一种选择是在开始时将允许的最大行数添加到DGV中,防止用户添加更多行,并在准备好提交输入时检查是否输入了信息。
答案 1 :(得分:0)
int MaxRowCount = 3;
private void dgUser_UserAddedRow(object sender, DataGridViewRowEventArgs e)
{
if (dataGridView1.Rows.Count > MaxRowCount)
{
dataGridView1.AllowUserToAddRows = false;
}
else
{
dataGridView1.AllowUserToAddRows = true;
}
}