Data Grid

28/03/2006 - 18:09 por Andrey | Informe spam
Hola Amigos...

De antemano, muchas gracias por lo que me puedan ayudar.

Necesito en un grid, definirle colores diferentes a una columna de acuerdo
se cumpla un porccentaje de un rango de la columna con respecto a la
sumatoria total de la columna...

por decir algo, si el grid consta de 100 registros y en la fila 80 de la
columna se cumple el 70% del valor total de la columna, en la fila 81, se
debe empezar a mostrar otro color.



Espero me halla hecho entender.
 

Leer las respuestas

#1 Luis Miguel Blanco
30/03/2006 - 07:40 | Informe spam
Hola Andrey

Para conseguir manipular una columna de un grid, de forma que según se va
pintando, compruebe ciertos valores y cambie su apariencia visual, debes
utilizar en primer lugar, un estilo en el control grid, y aplicarle a la
columna que necesites un objeto que herede de la clase DataGridTextBoxColumn,
que es la que utiliza el estilo del grid para representar sus columnas.

Te expondré un ejemplo que creo podrás adaptar a tu caso con algunos
retoques. Supongamos que cargamos en un grid algunos campos de la tabla
Products, de la base de datos Northwind, y en la columna del campo UnitPrice,
queremos que cuando su valor sea superior a 30, el color de fondo de la celda
sea distinto al habitual.

En primer lugar codificaremos la clase que hereda de DataGridTextBoxColumn,
en la que reemplazaremos el evento Paint para que muestre el color que nos
interesa en la situación antes mencionada.

'////////////////////////////////
Public Class MiColumna
Inherits DataGridTextBoxColumn

Protected Overloads Overrides Sub Paint(ByVal g As
System.Drawing.Graphics, _
ByVal bounds As System.Drawing.Rectangle, _
ByVal source As System.Windows.Forms.CurrencyManager, _
ByVal rowNum As Integer, _
ByVal backBrush As System.Drawing.Brush, _
ByVal foreBrush As System.Drawing.Brush, _
ByVal alignToRight As Boolean)

Dim oDataRowView As DataRowView
Dim oBrushFondo As SolidBrush

oDataRowView = source.List(rowNum)

If oDataRowView("UnitPrice") > 30 Then
oBrushFondo = New SolidBrush(Color.Cyan)
Else
oBrushFondo = New SolidBrush(Color.LightYellow)
End If

MyBase.Paint(g, bounds, source, rowNum, _
oBrushFondo, foreBrush, alignToRight)
End Sub
End Class
'////////////////////////////////

A continuación pasamos al código del formulario, en el que creamos la
conexión con la base de datos, rellenamos un DataSet que asignamos al control
grid, sobre el que establecemos la configuración visual necesaria a través de
un estilo, en el que asignamos una columna basada en la clase que acabamos de
crear anteriormente.

'////////////////////////////////
Imports System.Data.SqlClient

Public Class Form2
Inherits System.Windows.Forms.Form

Private oConnection As SqlConnection
Private oDataAdapter As SqlDataAdapter
Private oDataSet As DataSet
Private oGrid As DataGrid

Private Sub Form2_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Load
' crear conexión, adapter y dataset
oConnection = New
SqlConnection("Server=localhost;Database=Northwind;uid=sa;pwd=")
oDataAdapter = New SqlDataAdapter("SELECT * FROM Products",
oConnection)
oDataSet = New DataSet

' llenar el dataset utilizando el adaptador
oConnection.Open()
oDataAdapter.Fill(oDataSet, "Products")
oConnection.Close()

' instanciar objeto DataGrid
oGrid = New DataGrid

' añadir a la colección de controles del formulario
Me.Controls.Add(oGrid)

' establecer ubicación y tamaño
oGrid.Location = New Point(0, 0)
oGrid.Size = New Size(Me.Width - 20, Me.Height - 200)
oGrid.Anchor = AnchorStyles.Top Or _
AnchorStyles.Left Or _
AnchorStyles.Bottom Or _
AnchorStyles.Right

' establecer el enlace entre el grid y la fuente de datos
oGrid.SetDataBinding(oDataSet, "Products")

' modificar configuración visual base del datagrid
oGrid.CaptionFont = New Font("Comic Sans MS", 10, FontStyle.Bold)
oGrid.CaptionBackColor = Color.DeepSkyBlue
oGrid.CaptionForeColor = Color.DarkBlue
oGrid.CaptionText = "Listado de la tabla Products"

' 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"

' ATENCIÓN!!!! esta es la columna basada en nuestra clase
Dim gcsUnitPrice As New MiColumna
gcsUnitPrice.MappingName = "UnitPrice"
gcsUnitPrice.HeaderText = "Precio"
gcsUnitPrice.Format = "C2"

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

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

Espero que te sirva para solucionar tu problema.

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


"Andrey" wrote:


Hola Amigos...

De antemano, muchas gracias por lo que me puedan ayudar.

Necesito en un grid, definirle colores diferentes a una columna de acuerdo
se cumpla un porccentaje de un rango de la columna con respecto a la
sumatoria total de la columna...

por decir algo, si el grid consta de 100 registros y en la fila 80 de la
columna se cumple el 70% del valor total de la columna, en la fila 81, se
debe empezar a mostrar otro color.



Espero me halla hecho entender.

Preguntas similares