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
Crie um manipulador de eventos para o evento ItemCreated do controle DataList.
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
Crie um manipulador de eventos para o evento ItemDataBound do controle DataList.
Na manipulador de eventos, teste que você está trabalhando com um Item,AlternatingItem, ou EditItem e não com um cabeçalho ou rodapé.
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; } } }