• 0
Sign in to follow this  
Oraculum

Instrucao If No Datalist

Question

Estou tentando inserir uma instrução “if” dentro de um datalist, lembro-me que no asp era possível realizar tal operação quando fazíamos um loop pelo recordset como por exemplo: quando era necessário verificar o conteúdo do registro na tabela e a partir daí tomar certas decisões no sistema.

Em asp:

<%

Do Until rsAgendamentos.EOF

if rsAgendamentos("Atendido") = "1" then

‘ imprimimos um “x” na tela

Response.write(“x”)

End if

rsAgendamentos.MoveNext

Loop

%>

em aspx eu tentei fazer a intrucao if dentro de um datalist de forma semelhante há exibida em asp, mas não deu certo, consigo exibir todos os demais dados mais não consigo fazer uma instrução semelhante a esta exibida acima em asp.

<%# Container.DataItem("Atendido") %>

Alguém saberia me dizer como devo proceder para incluir uma instrucao if dentro de um datalist

Share this post


Link to post
Share on other sites

10 answers to this question

Recommended Posts

  • 0

Veja se isso resolve o caso:

<%# iif(Container.DataItem("Atendido")="1", "x", Container.DataItem("Atendido")) %>

A função Iif() recebe três argumentos, e retorna o segundo ou o terceiro dependendo do valor do primeiro (se o primeiro for verdadeiro ela retorna o segundo e se ele for falso ela retorna o terceiro).

Certo? wink.gif

Graymalkin

Share this post


Link to post
Share on other sites
  • 0

graymalkin eu tentei este cod que ce me postou e funcionou perfeitamente quando a intrucao não tem que somar variaveis, por exemplo neste codigo que utilizei o asp como exemplo eu criei uma variavel pra totalizar o total de clientes atendidos e todas as vezes que ele testava o registro e verificava que no bd o cliente tinha sido atendido ele adcionava "um" a mais na variavel como por exemplo:

if rscliente=1 then

'marque um x

response.write("x")

'acrescente um a mais no total de clientes atendidos

TheTotalClientesAtendidos = TheTotalClientesAtendidos + 1

end if

não sei se esta soma seria feita antes dos dados irem para o datalist ou dentro do proprio datalist.

ps. onde é que você consegue descobrir estas funcoes???

valeu pela atencao dispensada graymalkin

Share this post


Link to post
Share on other sites
  • 0

graymalkin eu tentei este cod que ce me postou e funcionou perfeitamente quando a intrucao não tem que somar variaveis, por exemplo neste codigo que utilizei o asp como exemplo eu criei uma variavel pra totalizar o total de clientes atendidos e todas as vezes que ele testava o registro e verificava que no bd o cliente tinha sido atendido ele adcionava "um" a mais na variavel

Sim, você pode fazer isso através do evento ItemDataBound que é chamado para cada item que é inserido na DataList:

    Private Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles DataList1.ItemDataBound
        If e.Item.DataItem("campo") = "valor" Then
            x += 1
        End If
    End Sub

não sei se esta soma seria feita antes dos dados irem para o datalist ou dentro do proprio datalist.

Mas, de fato, seria mais prático e rápido calcular a quantidade antes ou depois de inserir na DataList (por SQL) do que durante.

ps. onde é que você consegue descobrir estas funcoes???

A função Iif() já é uma velha conhecida desde o VB6. smile.gif

Abraços,

Graymalkin

Share this post


Link to post
Share on other sites
  • 0

ae Graymalkin tentei colocar este codigo na pagina acontece que apareceu uma mensagem de error vou coloca-la logo abaixo:

*********************************

Compiler Error Message: BC30506: Handles clause requires a WithEvents variable.

Source Error:

Line 40: DIM TipoPG as String

Line 41:

Line 42: Private Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles DataList1.ItemDataBound

Line 43: If e.Item.DataItem("Tipo") = "PG" Then

Line 44: TheAtendidoPG += 1

********************************

então abri a documentacao do sdk e verifiquei que teria que colocar no datalist a opcao de *** OnItemDataBound="DataList1_ItemDataBound" *** só que mesmo com isto continua apresentando o error.

Po mano ve se tu me passa um bizu de como resolver este problema

valeu

abracos

Share this post


Link to post
Share on other sites
  • 0

Simplesmente dê um duplo-clique sobre a DataList no WebForm e escolha o evento ItemDataBound (do canto superior-direito). A declaração da rotina do evento já aparece *pronta* para você. O que você precisa é só colocar o conteúdo da mesma.

Abraços,

Graymalkin

Share this post


Link to post
Share on other sites
  • 0

graymalkin eu to usando o dreamweaver pra fazer as paginas e não consegui achar nenhuma opcao de databound nele mesmo apos clickar emcima do data lista, não teria como colocar direto no codigo do data list...

e aquele error era realmente por causa de não informar nada no datalist sobre o itemdatabound ?

valeu pela atencao

Share this post


Link to post
Share on other sites
  • 0
graymalkin eu to usando o dreamweaver pra fazer as paginas e não consegui achar nenhuma opcao de databound nele mesmo apos clickar emcima do data lista, não teria como colocar direto no codigo do data list...

Ah, eu estou utilizando o Visual Studio .NET. Não sei como isso seria feito no Dreamweaver. No VS.NET podemos alterar tanto o código na página HTML quanto o código em VB.NET que será utilizado por detrás (code-behind). Eu prefiro este último, e foi por ele que fiz o que você quer.

Abraços,

Graymalkin

Share this post


Link to post
Share on other sites
  • 0

graymalkin eu resolvi fazer o relatorio no proprio dreamweaver, depois de dar uma pesquisada na documentacao do framework eu consegui desenvolver este exemplo:

PARTE DO CODIGO

************************

Sub Item_Bound(sender As Object, e As DataListItemEventArgs)

' É NECESSARIO AQUI IMPORTAR OS WEBFORM EXISTENTES DENTRO DO DATALIST VEJA COMO SE FAZ PARA IMPORTAR UM LABEL.

Dim lb_AtendidoPG As Label = CType(e.Item.FindControl("lb_AtendidoPG"), Label)

Dim lb_AtendidoGE As Label = CType(e.Item.FindControl("lb_AtendidoGE"), Label)

Dim lb_NaoAtendidoSG As Label = CType(e.Item.FindControl("lb_NaoAtendidoSG"), Label)

Dim lb_NaoAtendidoGE As Label = CType(e.Item.FindControl("lb_NaoAtendidoGE"), Label)

'TAMBEM É NECESSARIO IMPORTAR OS DADOS ATRIBUIDOS NO DATALIST OU SEJA OS AQUELES QUE ESCREVEMOS COMO container.item("Campo")

DIM TheTipo as String = DataBinder.Eval(e.Item.DataItem, "Tipo")

DIM TheAtendidos as String = DataBinder.Eval(e.Item.DataItem, "Atendido")

If TheTipo = "PG" Then

If TheAtendidos = "-1" Then

TheAtendido += 1

lb_AtendidoPG.text = "x"

else

TheNaoAtendido += 1

lb_NaoAtendidoSG.text = "x"

end if

End If

End Sub

'PARTE HTML

*************************

'PRIMEIRO FAZEMOS REFERENCIA AO ITEM DATA BOUND UTILIZANDO A TAG OnItemDataBound="Nome_do_Bound" QUE DEVE SER INSERIDA NO INICIO DA DECLARACAO DO DATALIST

<asp:DataList CssClass="textorelatorio" id="DataList1" runat="server" OnItemDataBound="Item_Bound">

<ItemTemplate>

<%# Container.DataItem("NomeCliente") %>

<asp:Label runat="server" ID="lb_AtendidoPG" />

<asp:Label runat="server" ID="lb_NaoAtendidoSG" />

<% Response.write(TheAtendido) %>

<% Response.write(TheNaoAtendido)%>

</ItemTemplate>

</asp:DataList>

Share this post


Link to post
Share on other sites
  • 0

AGORA FUNCIONOU BELEZA O DATALIST COM UM IF UM SELECT CASE, AGORA DA PRA FAZER O QUE AGENTE QUISER....

valeu PELA ATENÇAO DISPENSADA PARA O MEU PROBLEMA, GRAYMALKI

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this