根据DGV的属性限制可以在datagridview中输入的行数

时间:2010-02-24 22:05:02

标签: c# vb.net .net-3.5 datagridview

我有一个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

2 个答案:

答案 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;
        }
    }