Cómo utilizar la propiedad Expression en un DataTable

2
4982
.net datatable expression

DataColumn Expression: Obtiene o establece la expresión utilizada para filtrar filas, calcular los valores de una columna o crear una columna agregada.

Cuando vamos a cargar datos a un DataGrid o almacenar estos datos en otra estructura 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 definir una columna que automáticamente tome el valor de algún 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 ocasió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, otra de tipo String y que en sus expresiones dependiendo del valor de la 3ra columna del DataTable muestre True / False 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.

.net compute datatable Método Compute característica del DataTable - El método Compute es una propiedad del DataTable para realizar cálculos sobre las filas que…

Creamos la estructura del DataTable

VB

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

C#

    private void CreateDataTable() {
        try {
            dt.Columns.Add("Codigo", typeof(string));
            dt.Columns.Add("Descripcion", typeof(string));
            dt.Columns.Add("Valor", typeof(int));
            dt.Columns.Add("EsPositivo", typeof(bool), "IIF((Valor >= 0),True,False)");
            dt.Columns.Add("Tipo", typeof(string), "IIF((Valor >= 0),\'Positivo\',\'Negativo\')");
        }
        catch (Exception ex) {
            throw ex;
        }
    }

Como vemos ahí, le estamos creando todas las columnas al DataTable, pero también podríamos solo agregarle las dos columnas «expression» 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 alguna otra fórmula de cálculo, entonces «IIF((Valor >= 0),True,False)» nos va a retornar 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:

VB

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

C#

dt.Columns.Add("EsPositivo", typeof(bool), "IIF((Valor >= 0),True,False)");
dt.Columns.Add("Tipo", typeof(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 «expression» no se pueden modificar manualmente, están en un valor definido de ReadOnly.

Descargar ejemplo: DataTable_Expresion.zip

2 Comentarios

Dejar respuesta

Please enter your comment!
Please enter your name here