viernes, septiembre 29, 2023

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

Cómo saber la fecha que se modificó un procedimiento almacenado

Poder saber cuales objetos o procedimientos almacenados se modificaron recientemente es muy útil principalmente en bases de datos donde varios desarroladores tienen acceso
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.
SQL Server

Format en SQL Server (Transact-SQL)

La función Format aplica desde SQL Server 2012 en adelante. Devuelve un valor con el formato previamente indicado. Se puede utilizar para definir el formato de una fecha y hora o para retornar un numero como varchar en un formato específico.

Últimos artículos

SQL Server MERGE

MERGE in SQL Server for Insert, Delete and Update with two tables

Practical example using MERGE to synchronize two tables, Insert, Update and Delete in a single query. Valid for SQL SERVER 2008 or...

Como crear una API REST con ASP.NET Core 6.0

Crear una API REST con C# en ASP.NET es un proceso sencillo y rápido que permite exponer un conjunto de recursos a...
Machine Learning & Python

Introducción a Machine Learning en Python

Machine Learning es una rama de la inteligencia artificial que se enfoca en el desarrollo de sistemas que pueden aprender de...
SQL Server MERGE

MERGE en SQL Server, como utilizarlo de forma sencilla

El comando MERGE en SQL Server se utiliza para combinar datos de varias tablas en una sola tabla. Es útil para actualizar...