DotNetcr.com
Si deseas hacer un intercambio de links con DotNetcr, escríbenos aquí
Recibe las actualizaciones vía RSS
Te invitamos a unirte en nuestras redes
   http://www.facebook.com/DotNetcr
   http://www.twitter.com/dotnetcr

Como utilizar la propiedad Expression en un DataTable

Por royrojas | 10/30/2005 | Visitas 11,376 | Voto 5.00
Esta propiedad nos da la posibilidad de agregarle una columna al DataTable y que su valor se modifique automáticamente de acuerdo a algún otro valor de otra columna
Categorías : VB.NET
- 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
Area de Comentarios
Por jinkp - Fecha: 2006/09/21 03:30 PM
Muy bueno me ayudo muxisimo
Por Anónimo - Fecha: 2007/11/08 03:12 PM
muy util, gracias
Por Anónimo - Fecha: 2008/01/18 02:11 PM
Buenisimo el ejemplo para hacer entender....
Por Anónimo - Fecha: 2008/08/28 05:24 AM
Sin tener que usar la fórmula dentro de el datacolumn...¿se podría modificar un dato de determinada celda?
Por Anónimo - Fecha: 2008/08/28 05:25 AM
Soy la que escribió lo de modificar la columna, ya me contesté :) Muchas gracias, buen ejemplo :)
Por Anónimo - Fecha: 2012/08/29 11:00 AM
putos
Por Anónimo - Fecha: 2015/12/17 02:29 PM
Lo pregunto aqued mismo: Supongamos la tabla de este post (producto y vntaes), quisiera saber si se puede hacer un gre1fico que representara las vntaes de cada producto con cedrculos de tamaf1o proporcional a dichas vntaes respecto al total (100%). Me explico? Gracias y un saludo.
Por Anónimo - Fecha: 2015/12/19 02:47 AM
finally can append to it but the type atiuebttrs 1 will write to the tag once i re-run the program Is that any way where it will continue the numbers instead of starting from 1 .Currently Xml file: ok1no2 Not I wanted Peter7 Hope to become: ok1no2 This is what I wanted Peter7 My Coding:Dim m As String = 1 Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click Dim doc As New Xml.XmlDocument load file doc.Load( data.xml ) Dim root As XmlNode = doc.SelectSingleNode( //Books ) If root Is Nothing Then if this is a new document create root root = doc.SelectSingleNode( //Books ) Else create node get root node named users Dim Usersnode As Xml.XmlElement = doc.SelectSingleNode( //Books ) add the new node Dim newNode As Xml.XmlElement = doc.CreateElement( Book ) add atiuebttrs newNode.SetAttribute( type , m) add children nodes if any Dim child As Xml.XmlElement = doc.CreateElement( Author ) child.InnerText = txtAuthor.Text newNode.AppendChild(child) child = doc.CreateElement( Section ) child.InnerText = txtSection.Text newNode.AppendChild(child) add new node to users node Usersnode.AppendChild(newNode) m += 1 End If save doc doc.Save( data.xml ) End SubThanks Was this answer helpful? http://sgrhkqemj.com [url=http://btptlphq.com]btptlphq[/url] [link=http://pvntqivcmq.com]pvntqivcmq[/link]
Por Anónimo - Fecha: 2015/12/20 02:21 PM
We are incredibly ineflencud along with your publishing skills as well as with the structure in the website. Is that this any paid out subject material or maybe does one alter the item oneself? In any case stay inside the superb premium quality writing, it truly is strange to find out a great weblog like this one today. http://ddhcqckhnsr.com [url=http://dvbqkl.com]dvbqkl[/url] [link=http://rxhcrxy.com]rxhcrxy[/link]
Ingrese su Comentario
Comentario
Para poder votar debe estar registrado en DotNetcr.com
Solo queda registrado el primer voto enviado
Voto


Últimos Recursos
ricardo leppe t
pedrojavier
CALIN
willipinru
richard
ragomez
PER 238
MEX 236
CRI 188
COL 118
ESP 105
ARG 88