2010-02-24 15 views
1

我有一个UI,它使用typed数据集的datagridviews/bindingsource/datatable进行数据输入。数据集本身被序列化为SQL中的varbinary(max)。 (即没有tableadapter,后端架构)基于DGV的属性,可限制在datagridview中输入的行数

我想限制用户可以进入一些网格的行数(数据用于填充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 

我看到的行为是在MessageBox即使在离开最大行后出现当用户试图离开电网时。我可能会丢失消息框并以其他方式处理通知,但我认为其他人可能想出了一些更复杂的处理方法,只是简单地导致尝试添加许多记录以导出网格到下一个UI控件。

希望有任何其他建议,以更好的方式来解决这个问题。

TIA

回答

0

如何检查RowsAdded事件处理程序中的行数?

另一种方法是在开始时添加DGV允许的最大行数,防止用户添加更多内容,并在准备提交输入时检查信息是否已输入。

0

int MaxRowCount = 3;

private void dgUser_UserAddedRow(object sender, DataGridViewRowEventArgs e) 
    { 
     if (dataGridView1.Rows.Count > MaxRowCount) 
     { 
      dataGridView1.AllowUserToAddRows = false; 
     } 
     else 
     { 
      dataGridView1.AllowUserToAddRows = true; 
     } 
    }