Cómo: Personalizar elementos DataList en tiempo de ejecución

Actualización: noviembre 2007

Durante el procesamiento de la página, el control DataList crea elementos individuales que se representan en la página. Para permitir la personalización de los elementos en el momento de su creación, el control DataList desencadena dos eventos:

  • El evento ItemCreated se desencadena cuando el control DataList crea cada elemento, elemento alterno, encabezado, pie de página, etc.

  • El evento ItemDataBound se desencadena una vez que los controles de un elemento se han enlazado a datos. Puede utilizar los parámetros de evento para tener acceso a los datos que se utilizan en el enlace de datos. Utilice este evento si la personalización depende de los datos.

Si responde a estos eventos, puede modificar los elementos. Un uso habitual consiste en modificar la apariencia del elemento sobre la base de los datos que se muestran en él. Por ejemplo, si valor numérico leído de una base de datos es negativo, puede establecer el color de fondo del elemento en rojo.

Para personalizar elementos en tiempo de ejecución mediante el evento ItemCreated

  1. Cree un controlador de eventos para el evento ItemCreated del control DataList.

  2. En el controlador de eventos, obtenga el elemento actual utilizando el objeto Item del objeto argumento del evento e. El índice del elemento actual está disponible a través de la propiedad ItemIndex del objeto Item y su tipo está disponible a través de su propiedad ItemType (que se define utilizando la enumeración ListItemType).

    Nota:

    La propiedad ItemIndex devuelve un valor positivo sólo para los objetos Item, AlternatingItem y SelectedItem. El valor de índice para los elementos de encabezado, pie y separador es -1.

    El ejemplo siguiente muestra cómo se puede modificar condicionalmente el color de fondo de un elemento. En el ejemplo se utiliza la propiedad ItemType y la enumeración ListItemType para establecer los colores de fondo de los elementos. Los elementos se establecen en LightGoldenrodYellow, los elementos alternos se establecen en DarkGoldenrod y el elemento seleccionado se establece en Yellow.

    Protected Sub DataList1_ItemCreated(ByVal sender As Object, _
            ByVal e As EventArgs)
       Select Case e.Item.ItemType
          Case ListItemType.Item
             e.Item.BackColor = _
                 System.Drawing.Color.LightGoldenrodYellow
          Case ListItemType.AlternatingItem
             e.Item.BackColor = System.Drawing.Color.DarkGoldenrod
          Case ListItemType.SelectedItem
             e.Item.BackColor = System.Drawing.Color.Yellow
          Case Else
             ' Add code here to hand the header, footer, and
             ' separator templates.
       End Select
    End Sub
    
    protected void DataList1_ItemCreated(object sender, 
        EventArgs e)
    {
       switch (e.Item.ItemType)
       {
          case ListItemType.Item :
             e.Item.BackColor = 
                 System.Drawing.Color.LightGoldenrodYellow;
             break;
          case ListItemType.AlternatingItem :
             e.Item.BackColor = System.Drawing.Color.DarkGoldenrod;
             break;
          case ListItemType.SelectedItem :
             e.Item.BackColor = System.Drawing.Color.Yellow;
             break;
          default :
             // Add code here to handle the header, footer, and 
             // separator templates.
             break;
          }
    }
    

En el momento en que se produce el evento ItemCreated, los controles individuales de las plantillas no están aún enlazados a datos. Sin embargo, los datos están disponibles en el evento ItemDataBound.

Para personalizar elementos en tiempo de ejecución mediante el evento ItemDataBound

  1. Cree un controlador de eventos para el evento ItemDataBound del control DataList.

  2. En el controlador de eventos, compruebe que está trabajando con un objeto Item,AlternatingItem o EditItem y no con un encabezado o pie de página.

  3. Utilice la propiedad DataItem para comprobar los datos que se enlazarán al control y establecer una comparación de dichos datos.

    El ejemplo siguiente muestra cómo hacer una prueba condicional basada en datos. El ejemplo convierte la propiedad DataItem del argumento de evento en un objeto DataRowView. A continuación, extrae el campo denominado Quantity del objeto DataItem actual. Si la cantidad es menor de 10, el elemento del control DataList aparece en rojo.

    Protected Sub DataList1_ItemDataBound(ByVal sender As Object, _
            ByVal e As DataListItemEventArgs)
        If e.Item.ItemType = ListItemType.Item Or _
                e.Item.ItemType = ListItemType.AlternatingItem Then
            Dim drv As System.Data.DataRowView = _
                CType(e.Item.DataItem, System.Data.DataRowView)
            Dim quantity As Integer = _
                Integer.Parse(drv.Row("Quantity").ToString())
            If (quantity < 10) Then
                e.Item.BackColor = System.Drawing.Color.Red
            End If
        End If
    End Sub
    
    protected void DataList1_ItemDataBound(object sender, 
            DataListItemEventArgs e)
    {
       if(e.Item.ItemType == ListItemType.Item || 
              e.Item.ItemType == ListItemType.AlternatingItem)
       {
           System.Data.DataRowView drv = 
               (System.Data.DataRowView)(e.Item.DataItem);
           int quantity = int.Parse(drv.Row["Quantity"].ToString());
           if (quantity < 10)
           {
              e.Item.BackColor = Color.Red;
           }
        }
    }
    

Vea también

Referencia

Información general sobre DataList (Control de servidor Web)