Partilhar via


Como: Personalizar itens da DataList em time de execução

Durante o processamento de página, o controle DataList cria itens individuais que ele processará para a página.Para permitir que você personalize como os itens estão sendo criados, o controle DataList gera dois eventos:

  • O evento ItemCreated é disparado quando o controle DataList cria cada item, alternando item, cabeçalho, rodapé e assim por diante.

  • O evento ItemDataBound é gerado após os controles em um item terem sido vinculados aos dados.Você pode usar os parâmetros do evento para acessar os dados usados pela ligação de dados.Use este evento se a personalização depende dos dados.

Ao responder a esses eventos, você pode alterar os itens.Um uso típico é alterar a aparência de um item com base nos dados que estão sendo exibidos nele.Por exemplo, se um valor numérico lido de um banco de dados for negativo, você pode definir a cor do plano de fundo do item como vermelho.

Para personalizar itens em tempo de execução usando o evento ItemCreated

  1. Crie um manipulador de eventos para o evento ItemCreated do controle DataList.

  2. No manipulador de eventos, obtenha o item atual usando o objeto Item do objeto argumento de evento e.O índice do item atual está disponível através da propriedade ItemIndex do objeto Item e seu tipo está disponível pela sua propriedade ItemType (que é definida usando a enumeração ListItemType).

    Observação:

    A propriedade ItemIndex retorna um valor positivo somente para objetos Item, AlternatingItem e SelectedItem.O valor de índice para itens de cabeçalho, rodapé e separador é -1.

    O exemplo a seguir mostra como você pode modificar condicionalmente a cor do plano de fundo de um item.O exemplo usa a propriedade ItemType e a enumeração ListItemType para definir as cores do plano de fundo dos itens.Os itens são definidos como LightGoldenrodYellow, itens alternados são definidas como DarkGoldenrod, e o item selecionado é definido como 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;
          }
    }
    

No momento em que o evento ItemCreated é gerado, os controles individuais nos modelos ainda não foram vinculados aos dados.No entanto, os dados estão disponíveis no evento ItemDataBound.

Para personalizar itens em tempo de execução usando o evento ItemDataBound

  1. Crie um manipulador de eventos para o evento ItemDataBound do controle DataList.

  2. Na manipulador de eventos, teste que você está trabalhando com um Item,AlternatingItem, ou EditItem e não com um cabeçalho ou rodapé.

  3. Use a propriedade DataItem para testar os dados aos quais vai ser vinculado ao controle e basear uma comparação nisso.

    O exemplo a seguir mostra como você pode fazer um teste condicional com base nos dados.O exemplo converte a propriedade DataItem do argumento do evento em um objeto DataRowView.Em seguida, ele extrai o campo denominado Quantity do DataItem atual.Se a quantidade for menor que 10, o item no controle DataList fica vermelho.

    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;
           }
        }
    }
    

Consulte também

Referência

Visão geral do controle DataList do servidor Web