Evento ItemDataBound Data[Grid][List]


Muitas vezes necessitamos resgatar os valores que estão sendo inseridos no Data[Grid][List] para manipulações ou até mesmo efetuar verificações para exibir uma informação mais personalizada ou ocultar algum controle, etc. Tendo este cenário, uma solução seria utilizar o evento ItemDataBound destes controles. Este evento é disparado sempre quando uma nova linha é inserida no controle, durante o DataBind().

Mas para isso, algumas condições devem ser verificadas para que não ocorra um erro. A começar que devemos verificar o tipo da linha que esta sendo inserida no controle através do Enumerador ListItemType. Os dados estão sempre nas linhas do tipo Item ou AlternatingItem, para certificarmos que não seja estejamos inserindo ou tentando acessar um controle que não exista, mesmo porque muitas vezes não utilizamos as linhas do controle do tipo Header e Footer para inserir os dados da DB e sim para uma somatória, ou algo assim, que no caso do DataBind() devem ser desconsideradas.

Então, o código ficará desta forma:

[ VB.NET ]
    Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, _
        ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
        If e.Item.ItemType = ListItemType.AlternatingItem OrElse e.Item.ItemType = ListItemType.Item Then
            ‘…
        End If
    End Sub

[ C# ]
  private void DataGrid1_ItemDataBound(object sender, 
      System.Web.UI.WebControls.DataGridItemEventArgs e)
   {   
       if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
          {
               //…
          }
   }

Feito essa verificação, devemos agora nos atentar para qual o tipo de fonte de dados está sendo passado para a propriedade DataSource do controle. Isso varia quando utilizamos DataSets e DataReaders, pois devemos fazer o Cast para o tipo de objeto correto. Vejamos abaixo as duas opções:

[ VB.NET ] [ DataSets ]
DirectCast(e.Item.DataItem, DataRowView).Item(“NomeColuna”)
DirectCast(e.Item.DataItem, DataRowView).Item(0)

[ C# ] [ DataSets ]
((DataRowView)e.Item.DataItem)[“NomeColuna”]
((DataRowView)e.Item.DataItem)[0]

[ VB.NET ] [ DataReaders ]
DirectCast(e.Item.DataItem, DbDataRecord).Item(“NomeColuna”)
DirectCast(e.Item.DataItem, DbDataRecord).Item(0)

[ C# ] [ DataReaders ]
((DbDataRecord)e.Item.DataItem)[“NomeColuna”]
((DbDataRecord)e.Item.DataItem)[0]

Lembrando que no caso do uso dos DataReaders, devemos importar o Namespace System.Data.Common para podermos utilizar a Classe DbDataRecord.

Com isso, já podemos ter acesso aos dados/colunas que estão sendo adicionados no nosso controle, e com isso, nos permite fazermos manipulações e até mesmo testarmos condicionais para exibir ou não uma mensagem mais personalizada para o usuário de acordo com esses dados vindos da DB.

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s