Como utilizar la propiedad Expression en un DataTable

0
18

Descargar solución DataTable_Expression.zip

Cuando vamos a cargarle datos a un DataGrid o almacenar estos datos en otro DataTable para hacer algún tipo de proceso, generalmente creamos una estructura DataTable, para reflejar esos datos en pantalla con el tipo de dato que nosotros le indiquemos. Para estos casos es que podríamos definirle una columna que automáticamente tome el valor de algun cálculo en específico, y en realidad puede aceptar cualquier tipo de fórmula que nos retorne un valor válido.

Para el ejemplo que vamos a mostrar en esta ocación vamos a crear un DataTable con 3 columnas que son cargadas ya sea desde el sistema o manualmente desde el DataGrid, también podría cargarse desde alguna consulta a alguna base de datos.

Aparte de estas 3 columnas que mencionamos arriba vamos a definirle dos más, una de tipo Boolean y otra de tipo String y que en sus expresiones dependiendo del valor de la 3 columna del DataTable muestren True / False o Positivo / Negativo respectivamente.

Algo muy importante a destacar es que estas dos columnas de valores por expresión no se pueden modificar manualmente, ya que estan definidas automáticamente ReadOnly y solo se modifican por la expresión que le indiquemos.

Como creamos la estructura del DataTable

Private Sub CreateDataTable()
Try
dt.Columns.Add(“Codigo”, GetType(String))
dt.Columns.Add(“Descripcion”, GetType(String))
dt.Columns.Add(“Valor”, GetType(Integer))
dt.Columns.Add(“EsPositivo”, _
GetType(Boolean), “IIF((Valor >= 0),True,False)”)
dt.Columns.Add(“Tipo”, _
GetType(String), “IIF((Valor >= 0),'Positivo','Negativo')”)
Catch ex As Exception
Throw ex
End Try
End Sub

Como vemos ahí, le estamos creando todas las columnas al DataTable, pero también podríamos solo agregarle las dos columnas de expresiones en el caso de que ya tengamos un DataTable cargado con los datos.

Las dos columnas especiales que estamos trabajando como vemos en el procedimiento CreateDataTable una es de tipo Boolean nombrada “EsPositivo” donde la expresión que utilizamos es IIF pero bien podrías utilizar un If normal o algúna otra formula de cálculo, entonces “IIF((Valor >= 0),True,False)” nos va a retormar True cuando el valor de la columna “Valor” es 0 o mayor a 0 y False cuando es menor a 0. En la siguiente columna “Tipo” va a escribir Positivo o Negativo dependiendo del valor de la columna “Valor“.

Por lo tanto en el procedimiento indicado arriba, las dos columnas que mencionamos “EsPositivo” y “Tipo” deberían de quedar así con sus respectivas expresiones:

dt.Columns.Add(“EsPositivo”, _
GetType(Boolean), “IIF((Valor >= 0),True,False)”)
dt.Columns.Add(“Tipo”, _
GetType(String), “IIF((Valor >= 0),'Positivo','Negativo')”)

Para este ejemplo vamos a ver los datos de esta forma:

Como vemos las columnas “EsPositivo” y “Tipo” tomaron correctamente los valores que nosotros le difinimos.

Ahora que pasa con los datos que modifiquemos de los actuales o si le agregamos nuevas filas, pues en estos casos los valores de estas columnas se cambian automáticamente conforme al valor de la columna “Valor”.

Por ejemplo aquí le modificamos el valor al segundo registro para demostrar que estas columnas se cambian automáticamente.

Y aquí le agregamos dos nuevas filas para probar si los valores de cálculo salían bien en filas nuevas

Recordemos que estas dos columnas de valores por Expresión no se pueden modificar manualmente, estan en un valor definido de ReadOnly.

Descargar solución DataTable_Expression.zip

Con más de 18 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

Dejar respuesta

Please enter your comment!
Please enter your name here