Cambiar true/false por si/no en un datagrid generado con TableStyl

28/03/2006 - 09:11 por confiar en un ensamblado | Informe spam
Me exige el cliente q retire true y false en un datagrid generado con un
tablestyles y no encuentro la forma, por favor si alguien sabe. Muchas Gracias
 

Leer las respuestas

#1 Luis Miguel Blanco
28/03/2006 - 10:53 | Informe spam
Hola "confiar en un ensamblado"

Para conseguir cambiar en un datagrid el comportamiento de una columna que
muestra valores lógicos por los literales que tú quieras para el verdadero y
falso, lo que debes hacer es crear una clase que herede de
DataGridTextBoxColumn, y reemplazar el método GetColumnValueAtRow,
devolviendo el valor que necesites en cada caso, por ejemplo "SI" cuando en
la base de datos el campo tenga True, y "NO" cuando tenga False. Te detallo
con un ejemplo completo basado en una tabla de la bbdd Northwind para que
puedas probarlo.

Supongamos que tenemos un formulario con un datagrid, en el que mostramos
las filas de la tabla Products, pero utilizando un estilo aplicado a la
tabla, para personalizar su presentación:

'/////////////////////////////////////
' crear estilo de tabla para el datagrid
Dim oTableStyle As New DataGridTableStyle
oTableStyle.MappingName = "Products"
oTableStyle.HeaderFont = New Font("Papyrus", 8, FontStyle.Bold)
oTableStyle.BackColor = Color.Thistle
oTableStyle.AlternatingBackColor = Color.SpringGreen
oTableStyle.RowHeadersVisible = False

' crear columnas para el estilo de la tabla
Dim gcsProductID As New DataGridTextBoxColumn
gcsProductID.MappingName = "ProductID"
gcsProductID.HeaderText = "Código"
gcsProductID.Alignment = HorizontalAlignment.Center

Dim gcsProductName As New DataGridTextBoxColumn
gcsProductName.MappingName = "ProductName"
gcsProductName.HeaderText = "Nombre"

Dim gcsUnitPrice As New DataGridTextBoxColumn
gcsUnitPrice.MappingName = "UnitPrice"
gcsUnitPrice.HeaderText = "Precio"
gcsUnitPrice.Format = "C2"

Dim gcsDiscontinued As New DataGridBoolColumn
gcsDiscontinued.MappingName = "Discontinued"
gcsDiscontinued.HeaderText = "Disc."

' agregar columnas al estilo
oTableStyle.GridColumnStyles.AddRange(New DataGridColumnStyle() _
{gcsProductID, gcsProductName, _
gcsUnitPrice, gcsDiscontinued})

' añadir el estilo al datagrid
oGrid.TableStyles.Add(oTableStyle)
'/////////////////////////////////////

En este caso, la columna Discontinued de la tabla la configuramos como de
tipo lógico, usando un objeto DataGridBoolColumn para su presentación, lo que
mostrará en el datagrid una casilla marcada o no según el valor del campo.

Ahora bien, tal y como dices, quieres que en lugar de la casilla, podamos
mostrar SI o NO, para ello, escribimos la siguiente clase que herede de
DataGridTextBoxColumn, mediante la cual, vamos a poder mostrar lo que
queramos en esta columna del grid, no sólo SI o NO, sino cualquier literal:

'/////////////////////////////////////
Public Class DGTxtColLiteral
Inherits DataGridTextBoxColumn

' escribir miembros de clase para contener
' los valores de los literales
Private msLitVerdadero As String
Private msLitFalso As String

Public Property LiteralVerdadero() As String
Get
Return msLitVerdadero
End Get
Set(ByVal Value As String)
msLitVerdadero = Value
End Set
End Property

Public Property LiteralFalso() As String
Get
Return msLitFalso
End Get
Set(ByVal Value As String)
msLitFalso = Value
End Set
End Property

Protected Overrides Function GetColumnValueAtRow(ByVal source As
System.Windows.Forms.CurrencyManager, _
ByVal rowNum As Integer) As Object
' obtener el valor de la celda y
' sustituir por el literal
Dim oValorCelda As Object
oValorCelda = MyBase.GetColumnValueAtRow(source, rowNum)

Dim bytValor As Byte
bytValor = Convert.ToByte(oValorCelda)

If bytValor = 0 Then
Return msLitFalso
Else
Return msLitVerdadero
End If
End Function
End Class
'/////////////////////////////////////

A continuación, volvemos al código en el que creábamos el estilo y columnas
de estilo para el datagrid, y en la correspondiente al campo Discontinued,
sustituimos el código que teníamos por el siguiente:

'/////////////////////////////////////
Dim gcsDiscontinued As New DGTxtColLiteral
gcsDiscontinued.MappingName = "Discontinued"
gcsDiscontinued.HeaderText = "Disc."
gcsDiscontinued.LiteralVerdadero = "VERDADERO-OK"
gcsDiscontinued.LiteralFalso = "FALSO-NO VALE"
'/////////////////////////////////////

De esta forma podremos mostrar cualquier literal que deseemos, siendo muy
fácil su cambio en un momento dado, si el cliente cambia de opinión, y no le
gusta el literal que se muestra, cosa bastante frecuente ;-)

Si necesitas ampliar sobre este tema relativo a la configuración visual del
control DataGrid, publiqué en los números 6 y 7 de dotNetMania unos artículos
al respecto. Estos números se pueden descargar de forma gratuita actualmente
en la siguiente dirección:

http://www.dotnetmania.com/Articulos/index.html

Espero que este ejemplo te sirva para lo que necesitas

Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"confiar en un ensamblado" wrote:

Me exige el cliente q retire true y false en un datagrid generado con un
tablestyles y no encuentro la forma, por favor si alguien sabe. Muchas Gracias

Preguntas similares