Personalizando el Control DataGrid Fecha: 13/Jul/2005 (05/07/2005) Blog: http://percyreyes.blogspot.com E_mail: [email protected] - [email protected] ¡¡ Los peruanos SÍ podemos !! |
...algo personal !!!
Hola!...nuevamente estoy con ustedes para compartirles pequeñas dosis de .NET. No quiero empezar a explicar este artículo sin mencionar algunas cosillas personales. Saben..?? la vida de un programador es muy "dramática" y, porqué no decir, "trágica".... bueno esto se debe a que un día de estos me puse a reflexionar sobre todo el tiempo que le dedicaba a .net... ok??, y como quien dicen por allí, concluí que todo sacrificio tiene su recompensa... ustedes se preguntarán ¿Cuál fue mi conclusión? y ¿cuál fue el sacrificio?... bueno mi conclusión fue que .net es la mejor alternativa en lo que se refiere a desarrollo...okk...?? y ¿por qué digo esto..?... buena pregunta... digo esto debido a que en el poco tiempo (casi un año) que me he dedicado a .net he obtenido muchos beneficios personales gracias a esta grandiosa tecnología, como por ejemplo, prestigio, trabajo, y sobre todo... he podido mejorar mi trabajo en comunidades académicas .net, ahora mi vida a cambiado mucho, creo sinceramente como desarrollador, que .net es lo mejor por ahora... sin duda... bueno, ahora se preguntarán cual fue el sacrificio..??? bueno, el sacrificio es: noches sin dormir, ojos rojos, un poco de descuido personal, no asistir a la universidad (aquí no me dictan clases de .net) y escuchar que tu novia ya NO te quiere más (debido a que ya no le das tiempo), esto si que duele... verdad..??'jejejeje... bueno... ahora dirán seguramente que exagero... pero es la pura verdad, claro que programar con todo el alma y la mente es muy satisfactorio y divertido.
La programación es cosas de locos... jejejeje... estoy aprendiendo lo que es desarrollar en .net, diría que tienes que dejarlo todo por lograr tus sueños, así que los aconsejo a dar lo mejor de ustedes..ok ???, den lo mejor, estudien mucho, no se descuiden, la vida es muy bonita como para estar haciendo una "joda" de todas las oportunidades, ... oh!! grandiosa es la vida y también es algo complicada, exagero..??? no lo sé. Ahora, les pregunto, ¿han escuchado algo, acerca de el TAO DE LA PROGRAMACIÓN ?, de no ser así, les aconsejo que investiguen al respecto, es un tema que cambio mi vida como desarrollador, en conclusión, se trata de vivir para programar, es algo loco.?? tal vez sí, pero es la escencia de un programador, ser programador o, en todo caso, desarrollador es más que escribir código eficiente, se trata de una gran cultura que llena de satisfacción y felicidad toda tu vida, ...bueno ya sabéis todo esto, espero que reflexionen al respecto, y no se olviden de realizarlo todo por amor...ok ???, ahora empecemos a explicar de que se trata este artículo.
Esta vez no detallaré mucho respecto al control datagrid, pues esto sería redundar. Tan sólo explicaré conceptos claves las cuales serán de utilidad para entender acerca de la aplicación de estilos. Si deseas obtener información más información acerca de este control, pues en la web hay de "sobra".
Fuentes de datos para el control de DataGrid
Las fuentes de datos válidos para la DataGrid incluyen:
• Clase DataTable
• Clase DataView
• Clase DataSet
• Clase DataViewManagerSi su fuente es un conjunto de datos, puede ser un objeto en el formulario o un objeto que se pasó al formulario a través de un servicio Web XML. Puede unir a los conjuntos de datos, ya sean escritos o no escritos.
Puede unir a las siguientes estructuras si sus elementos exponen propiedades públicas:
Cualquier componente que implemente la interfaz IList. Esto incluye:• Arreglos de una sola dimensión.
• Cualquier componente que implemente la interfaz IListSource .
• Cualquier componente que implemente la interfaz IBindingList.Un uso común del control de DataGrid es mostrar una sola tabla de datos desde un conjunto de datos. Sin embargo, también se puede utilizar el control para mostrar múltiples tablas, incluyendo tablas relacionadas. La presentación de la cuadrícula se ajusta automáticamente de acuerdo con la fuente de datos:
• Tabla individual. La tabla aparece en una cuadrícula.
• Tablas múltiples. La cuadrícula puede mostrar una vista de árbol en la que los usuarios pueden navegar para localizar la tabla que desean mostrar.Cuando el control de DataGrid muestra una tabla y la propiedad AllowSorting se configura a verdadero, los datos se pueden clasificar al hacer clic en los encabezados de la columna. El usuario también puede agregar filas y editar celdas.
La relación entre un conjunto de tablas se muestra utilizando una estructura principal / secundaria de navegación. Las tablas principales son el nivel más alto de datos, y las tablas secundarias son aquellas tablas de datos que se derivan de los listados individuales en las tablas principales. Los expansores se muestran en cada fila principal que contenga una tabla secundaria. Al hacer clic en un ampliador, se genera una lista de vínculos tipo Web en las tablas secundarias, que cuando se seleccionan causan que las tablas secundarias aparezcan en pantalla. Al hacer clic en el icono "mostrar / ocultar las filas principales" ocultará la información acerca de la tabla principal (o causará que reaparezca si la ha ocultado previamente). Un botón hacia atrás permite la navegación inversa en la tabla vista previamente.
Algunas características del control de DataGrid, como colores, fuente de texto, alterar colores de fondo y propiedades de los datos, se puede formatear en el ambiente de diseño utilizando la ventana Propiedades. Están disponibles varias propiedades tales como CaptionForeColor, CaptionBackColor y CaptionFont.
Columnas y filas
Una DataGrid consiste en una colección de objetos DataGridTableStyle dentro de la propiedad TableStyles del control de DataGrid. Un estilo de tabla puede contener una colección de objetos DataGridColumnStyle incluidas en la propiedad GridColumnStyles del objeto DataGridTableStyle. Puede editar las propiedades TableStyles y ColumnStyles con editores de colección a los que se accede a través de la ventana Propiedades.
Cualquier objeto DataGridTableStyle asociado con el control de DataGrid puede ser accedido a través de GridTableStylesCollection. GridTableStylesCollection se puede editar en el diseñador con el Editor de la colección DataGridTableStyle, o de manera programática a través de la propiedad TableStyles del control de DataGrid, como se muestra en el ejemplo que se encuentra más abajo.
Los estilos de la tabla y los estilos de la columna se sincronizan con los objetos DataTable y DataColumn al establecer sus propiedades MappingName en las propiedades TableName y ColumnName apropiadas. Cuando un objeto DataGridTableStyle sin estilos de columna se agrega a una unión de control DataGrid a una fuente de datos válida, y la propiedad MappingName del estilo de la tabla se configura a una propiedad TableName válida, se crea una colección de objetos DataGridColumnStyle para ese estilo de tabla. Para cada objeto DataColumn que se encuentra en la colección Columnas del objeto DataTable, se agrega un objeto DataGridColumnStyle correspondiente al objeto GridColumnStylesCollection, al cual se accede a través de la propiedad GridColumnStyles del objeto DataGridTableStyle. Se pueden agregar o eliminar columnas de la cuadrícula utilizando el método Agregar o Eliminar en el objeto GridColumnStylesCollection.
Una colección de tipos de columna extiende la clase DataGridColumnStyle con capacidades de formateo y edición enriquecidas. Todos los tipos de columna se heredan de la clase base DataGridColumnStyle. La clase que se crea depende de la propiedad DataType del objeto DataColumn en el cual se basa DataGridColumn. Por ejemplo, un objeto DataColumn con su propiedad DataType configurada a System.Boolean se asociará con DataGridBoolColumn. La siguiente tabla describe cada uno de estos tipos de columna.
DataGridTextBoxColumn Acepta y muestra los datos como cadenas formateadas o no formateadas. Las capacidades de edición son las mismas a las que se utilizan para editar datos en un TextBox sencillo. Se hereda de DataGridColumnStyle. DataGridBoolColumn Acepta y muestra valores verdaderos, falsos y nulos. Se hereda de DataGridColumnStyle.
Eventos
Aparte de los eventos de control comunes como MouseDown, Intro y Desplazar, el control de DataGrid soporta los eventos asociados con la edición y navegación dentro de la cuadrícula. La propiedad CurrentCell determina cuál celda se selecciona. El evento CurrentCellChanged surge cuando el usuario navega a una celda nueva. Cuando el usuario navega a una tabla nueva (a través de las relaciones principales / secundarias), el evento Navegar surge. El evento BackButtonClick surge cuando el usuario hace clic en el botón posterior cuando ve una tabla secundaria, y el evento ShowParentDetailsButtonClick surge cuando se hace clic en el icono "mostrar / ocultar filas principales"...ufff!!! interesantes verdad.. ?, me gustaría seguir pero ya tengo algo de sueño, le sugiero investigar al respecto, no hay remedio.
Ejemplo:
1. Para poder mostrar los datos en la tabla, primero debe unir el control de DataGrid al conjunto de datos.
2. Declare un nuevo estilo de tabla y establezca el nombre de su correlación.
3. Declare un estilo de columna nuevo y establezca el nombre de su correlación y otras propiedades.
4. Invoque el método Agregar del objeto GridColumnStylesCollection para agregar la columna al estilo de la tabla
5. Invoque el método Agregar del objeto GridTableStylesCollection para agregar el estilo de tabla a la cuadrícula de datos.
VB .NET
...
DataGrid1.SetDataBinding(DsCustomers1, "Clientes")
Dim tableStyle As New DataGridTableStyle
tableStyle.MappingName = "Customers"
Dim myDataCol As New DataGridBoolColumn
myDataCol.HeaderText = "My New Column"
myDataCol.MappingName = "Current"
tableStyle.GridColumnStyles.Add(myDataCol)
DataGrid1.TableStyles.Add(tableStyle)
...
C# .NET
...
dataGrid1.SetDataBinding(DsCustomers1, "Clientes");
DataGridTableStyle tableStyle = new DataGridTableStyle();
tableStyle.MappingName = "Customers";
DataGridBoolColumn myDataCol = new DataGridBoolColumn();
myDataCol.HeaderText = "My New Column";
myDataCol.MappingName = "Current";
tableStyle.GridColumnStyles.Add(myDataCol);
dataGrid1.TableStyles.Add(tableStyle);
...
Ahora veamos un ejemplo sencillo de cómo aplicar los conceptos explicados anteriormente. En este ejemplo (formatear una datagrid usando estilos) se muestra cómo poco a poco vamos creando estilos de columnas y el estilo de tabla, las cuales serán usados para formatear los datos de cada columna de nuestra datagrid. Pues ahora te dejo que revises el código.
A continuación sigue código en Visual Basic NET:
Imports System Imports System.Drawing Imports System.Collections Imports System.ComponentModel Imports System.Windows.Forms Imports System.Data Public Class Form1 Inherits System.Windows.Forms.Form ' ... ' código generedo por el diseñador de windows form ' ... Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles MyBase.Load 'establecemos la referencia cultural del subproceso actual Español-Perú. System.Threading.Thread.CurrentThread.CurrentCulture = _ New System.Globalization.CultureInfo("es-PE") Dim TableName As New String("MyTable") Dim ObjEstiloTabla As New DataGridTableStyle With ObjEstiloTabla .MappingName = TableName .AlternatingBackColor = Color.Coral .BackColor = Color.Orange .ForeColor = Color.White .HeaderForeColor = Color.Blue .LinkColor = SystemColors.Control .AllowSorting = False .HeaderFont = New System.Drawing.Font("Verdana", 8.25F, _ System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, _ CType(1, System.Byte)) End With Me.DataGrid1.TableStyles.Add(ObjEstiloTabla) Me.DataGrid1.DataSource = GetMyTable(TableName) Dim ObjEstiloColumna As DataGridTextBoxColumn 'formateamos la columna 0 ó "Integer" para datos enteros ObjEstiloColumna = DataGrid1.TableStyles(0).GridColumnStyles(0) If Not (ObjEstiloColumna Is Nothing) Then ObjEstiloColumna.Format = "n1" End If 'formateamos la columna 1 ó "Double" para datos de tipo double ObjEstiloColumna = DataGrid1.TableStyles(0).GridColumnStyles(1) ' If Not (ObjEstiloColumna Is Nothing) Then ObjEstiloColumna.Format = "f3" End If 'formateamos los datos de la columna anterior como moneda nacional '(en este caso, usaremos la moneda nacional peruana) ObjEstiloColumna = DataGrid1.TableStyles(0).GridColumnStyles(2) ' If Not (ObjEstiloColumna Is Nothing) Then ObjEstiloColumna.Format = "c2" End If 'formateamos los datos de la columna 3 ó "Date" como Date ObjEstiloColumna = DataGrid1.TableStyles(0).GridColumnStyles(3) ' If Not (ObjEstiloColumna Is Nothing) Then ObjEstiloColumna.Format = "d" ObjEstiloColumna.Width = 100 End If End Sub Private Function GetMyTable(ByVal TableName As String) As DataTable Dim dt As New DataTable(TableName) Dim RowsCount As Integer = 10 dt.Columns.Add(New DataColumn("Integer", GetType(Integer))) dt.Columns.Add(New DataColumn("Double", GetType(Double))) dt.Columns.Add(New DataColumn("s/. Double", GetType(Double))) dt.Columns.Add(New DataColumn("Date", GetType(DateTime))) Dim r As New Random 'objeto que generará un número aleatorio Dim i As Integer While i < RowsCount Dim d As Double = 1000 * r.NextDouble() Dim dr As DataRow = dt.NewRow() dr(0) = Fix(d) dr(1) = d dr(2) = d dr(3) = DateTime.Now.Date.AddMonths(CType(r.NextDouble * 21, Double)) dt.Rows.Add(dr) i += 1 End While Return dt End Function End ClassNo olvides de darme tu voto en PanoramaBox, de esta manera seguiré compartiendo contigo lo que voy aprendiendo. Gracias.
Espacios de nombres usados en el código de este artículo:
System.Drawing
System.Collections
System.ComponentModel
System.Data
System.Threading
System.Globalization
Arbis Percy Reyes Paredes es peruano, tiene 21 años y se dedica a la construcción de software de manera profesional, joven desarrollador de aplicaciones Web y Servicios Web XML en VB .NET y C# .NET con bases de datos SQL Server 2000, aplicaciones basadas en Windows con VB .NET y C# .NET, VB 6.0, y controles y bibliotecas ActiveX; actualmente estudia en la Universidad Nacional de Trujillo, la carrera de Ingeniería de Sistemas. Le encanta el desarrollo de aplicaciones para dispositivos móviles tanto como la programación gráfica y programación avanzada de videojuegos.