Este tema aún no ha recibido ninguna valoración - Valorar este tema

DataGridTableStyle (Clase)

Actualización: noviembre 2007

Representa la tabla dibujada por el control System.Windows.Forms.DataGrid en tiempo de ejecución.

Espacio de nombres:  System.Windows.Forms
Ensamblado:  System.Windows.Forms (en System.Windows.Forms.dll)
public class DataGridTableStyle : Component, 
	IDataGridEditingService
public class DataGridTableStyle extends Component implements IDataGridEditingService
public class DataGridTableStyle extends Component implements IDataGridEditingService

El control System.Windows.Forms.DataGrid muestra datos en forma de cuadrícula. DataGridTableStyle es una clase que representa sólo la cuadrícula dibujada. Esta cuadrícula no debe confundirse con la clase DataTable, que es un posible origen de datos de la cuadrícula. En cambio, DataGridTableStyle representa estrictamente la cuadrícula tal como está dibujado en el control. Por consiguiente, mediante DataGridTableStyle se puede controlar la apariencia de la cuadrícula de cada DataTable. Para especificar qué DataGridTableStyle se utiliza al mostrar datos de un objeto DataTable, establezca la propiedad MappingName en la propiedad TableName de un objeto DataTable.

El control GridTableStylesCollection recuperado a través de la propiedad TableStyles contiene todos los objetos DataGridTableStyle utilizados por un control System.Windows.Forms.DataGrid. La colección puede contener tantos objetos DataGridTableStyle como se precisen, si bien la propiedad MappingName de cada uno debe ser única. En tiempo de ejecución, esto permite sustituir un objeto DataGridTableStyle diferente por los mismos datos, dependiendo de la preferencia del usuario. Para ello:

  1. Rellene GridTableStylesCollection con objetos DataGridTableStyle. Si existe un objeto DataGridTableStyle en la colección GridTableStylesCollection cuya propiedad MappingName tiene un valor que equivale a la propiedad TableName del objeto DataTable, DataTable se muestra con este objeto DataGridTableStyle. Si no existe ningún objeto DataGridTableStyle con una propiedad MappingName coincidente, DataTable se muestra con el estilo predeterminado para las tablas de la cuadrícula de datos.

  2. Cuando se necesite un estilo de cuadrícula diferente, utilice la propiedad Item para seleccionar el DataGridTableStyle apropiado (pase TableName a la propiedad Item) y establezca la propiedad MappingName del objeto devuelto en un valor nuevo.

  3. Utilice la propiedad Item para seleccionar el objeto DataGridTableStyle deseado y establezca su propiedad MappingName en la propiedad TableName de DataTable.

z6sw6fxs.alert_caution(es-es,VS.90).gif Precaución:

Primero deben crearse los objetos DataGridColumnStyle y, después, deben agregarse a GridColumnStylesCollection antes de agregar los objetos DataGridTableStyle a GridTableStylesCollection. Cuando se agrega un objeto DataGridTableStyle vacío con un valor válido MappingName a la colección, se generan automáticamente objetos DataGridColumnStyle. Por lo tanto, se producirá una excepción si se intentan agregar nuevos objetos DataGridColumnStyle a GridColumnStylesCollection con valores de MappingName duplicados.

Para determinar el objeto DataGridTableStyle que se muestra actualmente, utilice las propiedades DataSource y DataMember de System.Windows.Forms.DataGrid para devolver CurrencyManager. Si el origen de datos implementa la interfaz ITypedList, se puede utilizar el método GetListName para devolver la propiedad MappingName de la tabla actual. Esto se muestra en el siguiente código de C#:

 private void PrintCurrentListName(DataGrid myDataGrid){
  CurrencyManager myCM = (CurrencyManager)
  BindingContext[myDataGrid.DataSource, myDataGrid.DataMember];
  IList myList = myCM.List;
  ITypedList thisList = (ITypedList) myList;
  Console.WriteLine(thisList.GetListName(null));
 }

Si DataSet contiene objetos DataTable relacionados mediante objetos DataRelation y el objeto DataTable que se muestra actualmente es una tabla secundaria, la propiedad DataMember devolverá una cadena en forma de NombreDeTabla.NombreDeRelación (en el caso más sencillo). Si DataTable se encuentra en un nivel inferior de la jerarquía, la cadena se compondrá del nombre de la tabla primaria seguido de los valores de RelationName necesarios para alcanzar el nivel de la tabla. Por ejemplo, suponga que en una relación jerárquica hay tres objetos DataTable denominados (de arriba abajo) Regions, Customers y Orders, y dos objetos DataRelation denominados RegionsToCustomers y CustomersToOrders; la propiedad DataMember devolverá "Regions.RegionsToCustomers.CustomersToOrders". Sin embargo, la propiedad MappingName será entonces "Orders".

La colección de objetos DataGridTableStyle se devuelve mediante la propiedad TableStyles de System.Windows.Forms.DataGrid.

Cuando se muestra un objeto DataGridTableStyle, los valores de DataGridTableStyle reemplazarán los valores del control System.Windows.Forms.DataGrid. Si no se establece ningún valor para una propiedad de DataGridTableStyle determinada, se utilizará el valor del control System.Windows.Forms.DataGrid. En la siguiente lista se muestran las propiedades de DataGridColumnStyle que pueden establecerse para que reemplacen las propiedades del control System.Windows.Forms.DataGrid:

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. También observe que la propiedad MappingName distingue entre mayúsculas y minúsculas; se debe coincidir exactamente con el nombre de tipo. Para obtener un ejemplo, vea la propiedad MappingName.

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, el control ArrayList debe contener elementos en el momento de enlazarse y los objetos en el control DataGridTableStyle deben contener propiedades públicas. Una lista ArrayList vacía dará como resultado una cuadrícula vacía. Para enlazarse a ArrayList, hay que establecer la propiedad MappingName de DataGridTableStyle en "ArrayList" (el nombre de tipo).

En el siguiente ejemplo de código se crean dos instancias de DataGridTableStyle y se establece la propiedad MappingName de cada objeto en la propiedad TableName de un DataTable de DataSet. A continuación, en el ejemplo, se agregan objetos DataGridColumnStyle a GridColumnStylesCollection de cada DataGridTableStyle. Para obtener un ejemplo que puede ejecutarse, vea el ejemplo de System.Windows.Forms.DataGrid.

private void AddCustomDataTableStyle()
   {
      /* Create a new DataGridTableStyle and set
      its MappingName to the TableName of a DataTable. */
      DataGridTableStyle ts1 = new DataGridTableStyle();
      ts1.MappingName = "Customers";

      /* Add a GridColumnStyle and set its MappingName 
      to the name of a DataColumn in the DataTable. 
      Set the HeaderText and Width properties. */

      DataGridColumnStyle boolCol = new DataGridBoolColumn();
      boolCol.MappingName = "Current";
      boolCol.HeaderText = "IsCurrent Customer";
      boolCol.Width = 150;
      ts1.GridColumnStyles.Add(boolCol);

      // Add a second column style.
      DataGridColumnStyle TextCol = new DataGridTextBoxColumn();
      TextCol.MappingName = "custName";
      TextCol.HeaderText = "Customer Name";
      TextCol.Width = 250;
      ts1.GridColumnStyles.Add(TextCol);


      // Create the second table style with columns.
      DataGridTableStyle ts2 = new DataGridTableStyle();
      ts2.MappingName = "Orders";
      // Change the colors.
      ts2.ForeColor = Color.Yellow;
      ts2.AlternatingBackColor = Color.Blue;
      ts2.BackColor = Color.Blue;

      // Create new DataGridColumnStyle objects.
      DataGridColumnStyle cOrderDate = 
      new DataGridTextBoxColumn();
      cOrderDate.MappingName = "OrderDate";
      cOrderDate.HeaderText = "Order Date";
      cOrderDate.Width = 100;
      ts2.GridColumnStyles.Add(cOrderDate);

      PropertyDescriptorCollection pcol = this.BindingContext
      [myDataSet, "Customers.custToOrders"].GetItemProperties();

      DataGridColumnStyle csOrderAmount = 
      new DataGridTextBoxColumn(pcol["OrderAmount"], "c", true);
      csOrderAmount.MappingName = "OrderAmount";
      csOrderAmount.HeaderText = "Total";
      csOrderAmount.Width = 100;
      ts2.GridColumnStyles.Add(csOrderAmount);

      // Add the DataGridTableStyle objects to the collection.
      myDataGrid.TableStyles.Add(ts1);
      myDataGrid.TableStyles.Add(ts2);
   }



private void AddCustomDataTableStyle()
{
    /*  Create a new DataGridTableStyle and set
        its MappingName to the TableName of a DataTable. 
     */
    DataGridTableStyle ts1 = new DataGridTableStyle();
    ts1.set_MappingName("Customers");
    /*  Add a GridColumnStyle and set its MappingName 
        to the name of a DataColumn in the DataTable. 
        Set the HeaderText and Width properties. 
     */

    DataGridColumnStyle boolCol = new DataGridBoolColumn();
    boolCol.set_MappingName("Current");
    boolCol.set_HeaderText("IsCurrent Customer");
    boolCol.set_Width(150);
    ts1.get_GridColumnStyles().Add(boolCol);

    // Add a second column style.
    DataGridColumnStyle textCol = new DataGridTextBoxColumn();
    textCol.set_MappingName("custName");
    textCol.set_HeaderText("Customer Name");
    textCol.set_Width(250);
    ts1.get_GridColumnStyles().Add(textCol);

    // Create the second table style with columns.
    DataGridTableStyle ts2 = new DataGridTableStyle();
    ts2.set_MappingName("Orders");
    // Change the colors.
    ts2.set_ForeColor(Color.get_Yellow());
    ts2.set_AlternatingBackColor(Color.get_Blue());
    ts2.set_BackColor(Color.get_Blue());

    // Create new DataGridColumnStyle objects.
    DataGridColumnStyle cOrderDate = new DataGridTextBoxColumn();
    cOrderDate.set_MappingName("OrderDate");
    cOrderDate.set_HeaderText("Order Date");
    cOrderDate.set_Width(100);
    ts2.get_GridColumnStyles().Add(cOrderDate);

    PropertyDescriptorCollection pcol = 
        this.get_BindingContext().
        get_Item(myDataSet, "Customers.custToOrders").
        GetItemProperties();
    DataGridColumnStyle csOrderAmount = 
        new DataGridTextBoxColumn(pcol.get_Item("OrderAmount"), "c", true);
    csOrderAmount.set_MappingName("OrderAmount");
    csOrderAmount.set_HeaderText("Total");
    csOrderAmount.set_Width(100);
    ts2.get_GridColumnStyles().Add(csOrderAmount);

    // Add the DataGridTableStyle objects to the collection.
    myDataGrid.get_TableStyles().Add(ts1);
    myDataGrid.get_TableStyles().Add(ts2);
} //AddCustomDataTableStyle


System.Object
  System.MarshalByRefObject
    System.ComponentModel.Component
      System.Windows.Forms.DataGridTableStyle
Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 3.5, 2.0, 1.0
¿Le ha resultado útil?
(Caracteres restantes: 1500)
Contenido de la comunidad Agregar