Unidad I – Aplicación de controles 1.2 CONTROLES DE ACCESO A DATOS a) DataGridView (Clase) El control DataGridView proporciona una tabla personalizable para mostrar datos. La clase DataGridView permite personalizar celdas, filas, columnas y bordes mediante propiedades como DefaultCellStyle, ColumnHeadersDefaultCellStyle, CellBorderStyle y GridColor. Puede utilizar un control DataGridView para mostrar datos con o sin un origen de datos subyacente. Sin especificar un origen de datos, puede crear las columnas y filas que contendrán los datos y agregarlas directamente a DataGridView. Como alternativa, puede establecer las propiedades DataSource y DataMember para enlazar el control DataGridView a un origen de datos y llenarlo de datos automáticamente. Al trabajar con grandes cantidades de datos, puede establecer la propiedad VirtualMode en true para mostrar un subconjunto de los datos disponibles. El modo virtual requiere la implementación de una caché de datos a partir de la cual se llenará el control DataGridView. Aunque el control DataGridView reemplaza y agrega funcionalidad al control DataGrid de las versiones anteriores, se conserva el control DataGrid por compatibilidad con las versiones anteriores y para uso futuro, si así se elige. Nota: El control DataGridView hereda las propiedades ContextMenu y ContextMenuStrip de Control, pero sólo admite la propiedad ContextMenuStrip. El uso de la propiedad ContextMenu con el control DataGridView no tiene ningún efecto. b) DataGrid (Clase) Muestra datos de ADO.NET en una cuadrícula desplazable. El control DataGridView reemplaza y agrega funcionalidad al control DataGrid; sin embargo, el control DataGrid se conserva para compatibilidad con versiones anteriores y para uso futuro, si así se elige. System.Windows.Forms.DataGrid muestra vínculos de tipo Web a las tablas secundarias. Para desplazarse a la tabla secundaria, haga clic en un vínculo. Cuando se muestra una tabla secundaria, aparece en el título un botón de retroceso en el que se puede hacer clic para volver a la tabla primaria. Los datos de las filas primarias se muestran debajo del título y encima de los encabezados de columna. Para ocultar la información de las filas primarias, haga clic en el botón situado a la derecha del botón de retroceso. Para mostrar una tabla en System.Windows.Forms.DataGrid en tiempo de ejecución, utilice el método SetDataBinding para establecer las propiedades DataSource y DataMember en un origen de datos válido. Son válidos los siguientes orígenes de datos: • • • • • • • DataTable. DataView. DataSet. DataViewManager. Matriz unidimensional Cualquier componente que implemente la interfaz IListSource Cualquier componente que implemente la interfaz IList Se puede crear una cuadrícula que permita a los usuarios editar los datos pero que les impida agregar nuevas filas; para ello, se debe utilizar DataView como origen de datos y establecer el valor de la propiedad AllowNew en false. Lic.Cesar Espinoza Jiménez 1 Unidad I – Aplicación de controles Los objetos BindingManagerBase administran asimismo los orígenes de datos. Para cada tabla de un origen de datos, se puede devolver un objeto BindingManagerBase desde BindingContext del formulario. Por ejemplo, se puede determinar el número de filas de un origen de datos devolviendo la propiedad Count del objeto BindingManagerBase asociado. Para validar los datos, utilice los objetos subyacentes que representan los datos y sus eventos. Por ejemplo, si los datos proceden de un objeto DataTable de DataSet, utilice los eventos ColumnChanging y RowChanging. Nota: Dado que es posible personalizar el número de columnas (agregando o eliminando miembros de GridColumnStylesCollection) y que las filas pueden ordenarse por columna, no es posible garantizar que los valores de las propiedades RowNumber y ColumnNumber se correspondan con los índices de DataRow y DataColumn en DataTable. Por este motivo, se ha de evitar el uso de dichas propiedades en el evento Validating para validar los datos. Para determinar la celda seleccionada, utilice la propiedad CurrentCell. Para cambiar el valor de cualquier celda, utilice la propiedad Item, que puede adoptar los índices de fila y columna de la celda o un solo objeto DataGridCell. Supervise el evento CurrentCellChanged para detectar cuándo el usuario selecciona otra celda. Para determinar en qué parte del control ha hecho clic el usuario, utilice el método HitTest en el evento MouseDown. El método HitTest devuelve un objeto DataGrid.HitTestInfo, que contiene la fila y la columna de un área en la que se ha hecho clic. Para administrar la apariencia del control en tiempo de ejecución, existen varias propiedades que permiten establecer los atributos de color y título, incluidas las propiedades CaptionForeColor, CaptionBackColor, CaptionFont, etc. La apariencia de la cuadrícula o cuadrículas mostradas puede modificarse también creando objetos DataGridTableStyle y agregándolos a la colección GridTableStylesCollection, a la que se puede obtener acceso mediante la propiedad TableStyles. Por ejemplo, si la propiedad DataSource está establecida en una clase DataSet que contiene tres objetos DataTable, se pueden agregar tres objetos DataGridTableStyle a la colección, uno por cada tabla. Para sincronizar cada objeto DataGridTableStyle con un objeto DataTable, establezca la propiedad MappingName de DataGridTableStyle en TableName de DataTable. Para crear una vista personalizada de una tabla, hay que crear una instancia de una clase DataGridTextBoxColumn o DataGridBoolColumn y agregar el objeto a la colección GridTableStylesCollection, a la que se obtiene acceso a través de la propiedad TableStyles. Ambas clases se heredan de DataGridColumnStyle. Para cada estilo de columna, hay que establecer la propiedad MappingName en ColumnName de una columna que se desee mostrar en la cuadrícula. Para ocultar una columna, establezca su propiedad MappingName en un valor que no sea una propiedad ColumnName válida. Para aplicar formato al texto de una columna, hay que establecer la propiedad Format de DataGridTextBoxColumn en uno de los valores de Cadenas de formato de fecha y hora o Cadenas con formato numérico estándar. Para enlazar DataGrid a una matriz de objetos con establecimiento inflexible de tipos, el tipo de objeto debe contener propiedades públicas. Para crear un control DataGridTableStyle que muestre la matriz, establezca la propiedad DataGridTableStyle.MappingName en typename[] donde el nombre del tipo de objeto reemplaza a typename. Observe también que la propiedad MappingName distingue entre mayúsculas y minúsculas; el nombre de tipo debe coincidir exactamente. Lic.Cesar Espinoza Jiménez 2 Unidad I – Aplicación de controles También es posible enlazar DataGrid a ArrayList. Una característica de ArrayList es que puede contener objetos de varios tipos, pero DataGrid sólo puede enlazarse a dicha lista si todos los elementos de la lista son del mismo tipo que el primero. Esto significa que todos los objetos deben ser del mismo tipo o que deben heredarse de la misma clase que el primer elemento de la lista. Por ejemplo, si el primer elemento de una lista es Control, el segundo elemento podría ser TextBox (que se hereda de Control). En cambio, si el primer elemento es TextBox, el segundo objeto no puede ser Control. Además, ArrayList debe contener elementos en el momento de enlazarse. Una lista ArrayList vacía dará como resultado una cuadrícula vacía. Además, los objetos en el control ArrayList deben contener propiedades públicas. Para enlazarse a ArrayList, hay que establecer la propiedad MappingName de DataGridTableStyle en "ArrayList" (el nombre de tipo). Para cada DataGridTableStyle, se pueden establecer los atributos de color y título que reemplazan los valores del control System.Windows.Forms.DataGrid. Sin embargo, si no se establecen dichas propiedades, se utilizan los valores del control de manera predeterminada. Las propiedades DataGridTableStyle pueden reemplazar las siguientes propiedades: • • • • • • • • • • • • • • • • • • AllowSorting AlternatingBackColor BackColor ColumnHeadersVisible ForeColor GridLineColor GridLineStyle HeaderBackColor HeaderFont HeaderForeColor LinkColor PreferredColumnWidth PreferredRowHeight ReadOnly RowHeadersVisible RowHeaderWidth SelectionBackColor SelectionForeColor Para personalizar la apariencia de columnas individuales, agregue objetos DataGridColumnStyle a la colección GridColumnStylesCollection, a la que se obtiene acceso mediante la propiedad GridColumnStyles de cada DataGridTableStyle. Para sincronizar cada objeto DataGridColumnStyle con un objeto DataColumn en DataTable, establezca la propiedad MappingName en la propiedad ColumnName de un objeto DataColumn. Al construir un objeto DataGridColumnStyle, también se puede establecer una cadena de formato que especifica el modo en que se muestran los datos en la columna. Por ejemplo, se puede especificar que la columna utilice un formato de fecha corta para mostrar las fechas que contiene la tabla. Nota: El control DataGridView reemplaza y agrega funcionalidad al control DataGrid; sin embargo, el control DataGrid se conserva para mantener la compatibilidad con versiones anteriores y para uso futuro, si así se elige. Lic.Cesar Espinoza Jiménez 3