none
Trocar a cor de fundo de uma celula de um listview e acordo com o valor da celula RRS feed

  • Pergunta

  • Bom dia a todos.

    Sou iniciante em desenvolvimento web, e estou encontrado dificuldades para trocar a cor de fundo de uma celula do listview de acordo com o valor dessa celula, segue abaixo o trecho do codigo que estou tentando implementar.

                    <% If (Eval("grd_periodo") = "M") Then%>
                    <td style="background-color: Blue">
                        <%# Eval("grd_periodo")%>
                    </td>
                    <%Else%>
                    <td style="background-color: Yellow">
                        <%# Eval("grd_periodo")%>
                    </td>
                    <%  End If%>
    Desde já agradeço a todos.
    terça-feira, 31 de julho de 2012 15:05

Respostas

  • Ahhhh o ASP Clássico... Não, não tenho saudades.

    Daniel,

    Muito provavelmente está dando erro porque você está comparando um tipo Object com um String. Como você não está fazendo isso no CodeBehind, não está tão óbvio para o depurador. 

    Mude essa linha: 

    <% If (Eval("grd_periodo") = "M") Then%>

    Para:

    <% If (Eval("grd_periodo").ToString() = "M") Then%>

    Talvez nem assim irá funcionar, porque o uso do Eval() sem a tag <%# %> não é recomendada.

    Na verdade, todo esse bloco de código não é recomendado. Você está programando como se estivesse no ASP Classico. É claro que eu não vou programar aqui para você - a menos que você compartilhe seu salário! HÁ! - então vou apenas mostrar o caminho e daí pra frente é contigo.

    1 - Não imprima na tela o eval sem um Label. Por que?! Porque não; não é uma boa prática! Faça assim:

    No lugar de:
    <%# Eval("grd_periodo")%>

    Faça:
    <asp:Label ID="LabelPeriodo" runat="server" Text='<%# Eval("grd_periodo") %>'></asp:Label>


    2 - Não programe no seu ASPX. Utilize a classe vinculada à sua ASPX para isso utilizando o CodeBehind. Veja mais aqui: http://support.microsoft.com/kb/303247

    3 - Para esse tipo de desenvolvimento você deve fazer usando o evento OnItemDataBound. Veja aqui como ele funciona: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemdatabound.aspx


    Rafael Santos
    E-mail: rsdsantos@gmail.com

    Pequeno Gafanhoto

    • Marcado como Resposta Daniel A. Araujo terça-feira, 31 de julho de 2012 22:01
    terça-feira, 31 de julho de 2012 15:30
  • Olá Daniel,

    voce pode simplesmente trocar o ForeColor de um label (isso não é uma pratica ruim...).

    Exemplo:

    <asp:TextBox ID="txtObsGerente" runat="server" Width="100%" Text='<%# IIf(Eval("obsgerente").ToString() = "", "Nenhum comentário cadastrado.", Eval("obsgerente").ToString()) %>' Rows="15" TextMode="MultiLine" ReadOnly="true" ForeColor='<%# IIf(Eval("obsgerente").ToString() = "", Drawing.Color.Red, Drawing.Color.Black ) %>' />


    Fabiano

    • Marcado como Resposta Daniel A. Araujo terça-feira, 31 de julho de 2012 22:02
    terça-feira, 31 de julho de 2012 16:37

Todas as Respostas

  • Ahhhh o ASP Clássico... Não, não tenho saudades.

    Daniel,

    Muito provavelmente está dando erro porque você está comparando um tipo Object com um String. Como você não está fazendo isso no CodeBehind, não está tão óbvio para o depurador. 

    Mude essa linha: 

    <% If (Eval("grd_periodo") = "M") Then%>

    Para:

    <% If (Eval("grd_periodo").ToString() = "M") Then%>

    Talvez nem assim irá funcionar, porque o uso do Eval() sem a tag <%# %> não é recomendada.

    Na verdade, todo esse bloco de código não é recomendado. Você está programando como se estivesse no ASP Classico. É claro que eu não vou programar aqui para você - a menos que você compartilhe seu salário! HÁ! - então vou apenas mostrar o caminho e daí pra frente é contigo.

    1 - Não imprima na tela o eval sem um Label. Por que?! Porque não; não é uma boa prática! Faça assim:

    No lugar de:
    <%# Eval("grd_periodo")%>

    Faça:
    <asp:Label ID="LabelPeriodo" runat="server" Text='<%# Eval("grd_periodo") %>'></asp:Label>


    2 - Não programe no seu ASPX. Utilize a classe vinculada à sua ASPX para isso utilizando o CodeBehind. Veja mais aqui: http://support.microsoft.com/kb/303247

    3 - Para esse tipo de desenvolvimento você deve fazer usando o evento OnItemDataBound. Veja aqui como ele funciona: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemdatabound.aspx


    Rafael Santos
    E-mail: rsdsantos@gmail.com

    Pequeno Gafanhoto

    • Marcado como Resposta Daniel A. Araujo terça-feira, 31 de julho de 2012 22:01
    terça-feira, 31 de julho de 2012 15:30
  • Olá Daniel,

    voce pode simplesmente trocar o ForeColor de um label (isso não é uma pratica ruim...).

    Exemplo:

    <asp:TextBox ID="txtObsGerente" runat="server" Width="100%" Text='<%# IIf(Eval("obsgerente").ToString() = "", "Nenhum comentário cadastrado.", Eval("obsgerente").ToString()) %>' Rows="15" TextMode="MultiLine" ReadOnly="true" ForeColor='<%# IIf(Eval("obsgerente").ToString() = "", Drawing.Color.Red, Drawing.Color.Black ) %>' />


    Fabiano

    • Marcado como Resposta Daniel A. Araujo terça-feira, 31 de julho de 2012 22:02
    terça-feira, 31 de julho de 2012 16:37
  •    Rafa, boa noite.

      Muito obrigado pela ajuda, e pelo tok, com certeza o caminho das pedras e melhor pois o conceito fica firmado.

    terça-feira, 31 de julho de 2012 22:01
  • Fabiano obrigado pelo exemplo ajudou muito, é isso mesmo
    terça-feira, 31 de julho de 2012 22:02