domingo, octubre 17, 2021

Limitar el número de Rows en el DataGrid

Con este código puedes restringir la cantidad de registros que deseamos ingresar en nuestro DataGrid.

Para esto vamos a crear un control que herede de System.Windows.Forms.DataGrid y vamos a sobreescribir el procedimiento ColumnStartedEditing, que se ejecuta siempre que se edita algún dato del DataGrid.

También vamos a necesitar una función que nos retorne el numero de rows en el DataGrid, para comparar con el valor que nosotros le indiquemos. Ver función CuentaLineasDataGrid.

Otra función que vamos a necesitar es la que publicamos en un artículo anterior, «Impedir agregar nuevos rows en el Datagrid», que nos elimina la línea del asterisco, que está al final del DataGrid y le indicamos al DataView que no acepte mas registros. Ver función PermiritNewRow.

Al crear las propiedades AceptarNewRows() y CantidadRowsPermitidos(), cuando agreguemos el DataGrid que acabamos de modificar, en la ventana de propiedades vamos a poder controlarlos:

Le indicamos el si aceptamos nuevos rows, valores True o False

Le indicamos la cantidad de rows máximo que deseamos ingresar, en el caso de que no necesitemos un límete de rows le dejamos el valor defaul 0.

El código completo aquí:

Imports System.ComponentModel
Imports System.Windows.Forms

Public Class MyDataGrid
Inherits System.Windows.Forms.DataGrid

#Region » Variables «

Private _CantidadRowsPermitidos As Integer = Nothing
Private _AceptarNewRows As Boolean = True

#End Region

#Region » Propiedades «

<Description(«Indica la cantidad de rows permitidos en el DataGrid»)> _
Public Property CantidadRowsPermitidos() As Integer
Get
Return _CantidadRowsPermitidos
End Get
Set(ByVal Value As Integer)
_CantidadRowsPermitidos = Value
End Set
End Property

<Description(«Indica si se permite agregar nuevos rows al DataGrid»)> _
Public Property AceptarNewRows() As Boolean
Get
Return _AceptarNewRows
End Get
Set(ByVal Value As Boolean)
_AceptarNewRows = Value
End Set
End Property

#End Region

'Procedimiento que le indica al datagrid si se pueden agregar o no mas rows
Private Sub PermiritNewRow(ByVal valor As Boolean)
Try
Dim cm As CurrencyManager = CType(Me.BindingContext(Me.DataSource, Me.DataMember), CurrencyManager)
CType(cm.List, DataView).AllowNew = valor
Catch ex As Exception
Throw ex
End Try
End Sub

<Description(«Retorna el número de rows en el DataGrid»)> _
Public Function CuentaLineasDataGrid() As Integer
Try
Dim numRows As Integer = Me.BindingContext(Me.DataSource, Me.DataMember).Count
Return numRows
Catch ex As Exception
Throw ex
End Try
End Function

Protected Overloads Overrides Sub ColumnStartedEditing(ByVal bounds As System.Drawing.Rectangle)
Try
If Me.AceptarNewRows Then
If Me.CuentaLineasDataGrid <= CantidadRowsPermitidos Or
CantidadRowsPermitidos = 0 Then
MyBase.ColumnStartedEditing(bounds)
AceptarNewRows = True
Else
AceptarNewRows = False
End If
Else
AceptarNewRows = False
End If

PermiritNewRow(AceptarNewRows)
Catch ex As Exception
Throw ex
End Try
End Sub

End Class




Roy Rojashttp://www.dotnetcr.com
Con más de 20 años de experiencia en programación, experto en lenguajes .NET, VB, C#, ASP.NET, Xamarin, XCode, DBA en SQL Server. Creador de dotnetcr.com, sitio web para programadores en español. royrojas.com | dotnetcr.com | GitHub

Redes Sociales

2,736FansMe gusta
326SeguidoresSeguir

Popular esta semana

SQL Server - Merge

MERGE en SQL Server para Insert, Delete y Update con dos tablas

Ejemplo práctico usando MERGE para sincronizar dos tablas, Insert, Update y Delete en un solo query. Válido para SQL SERVER 2008 o superior.

Calcular la distancia entre dos puntos geográficos en SQL Server

En este ejemplo mostramos como calcular la distancia en metros o kilómetros entre dos puntos geográficos, por latitud y longitud. El resultado lo obtenemos en metros o kilómetros.

SQL Server: Error 3414, servicio no inicia

El error 3414 se produce generalmente cuando el motor de la base de datos SQL Server sufre algún evento imprevisto. Aquí lo solucionamos.

Últimos artículos

Flutter - Instagram Clone App

Instagram Clone App con Flutter

Marvin Stanley Valenzuela nos comparte un reto y genialidad a la vez, excelente práctica de la que podemos aprender mucho, diseñó en...

¿Cómo agregar una IP adicional en una VM Ubuntu en Azure?

Lo más común al momento de crear y configurar un nuevo servidor es que a este le asigne un solo IP, pero...
flutter one year

Después de un año con Flutter, esto es lo que aprendí

La historia comenzó cuando un día desperté pensando en tener un nuevo proyecto personal. Me dije a mí misma que hay muchas...
promocionar app

Cómo promocionar gratis tu app usando tappx

Como todos los que me siguen y mis redes sociales sabrán, recientemente lancé mi primera aplicación, pero más allá del desafío tecnológico de...