Array
(
)

Chamar ou não um javascript

Pjava
   - 11 out 2013

Pessoal, tenho essa coluna de um AspxGridView(DevExpress). Observe que dentro dela há uma chamada a uma função javascript que até agora funciona. O que eu preciso é que essa chamada aconteça apenas quando o valor da coluna for maior que zero(>0). Isso deve ser feito do code behind, pelo que eu entendo, mas se tiver como fazer do Asp.Net, é bem-vindo também. Alguém pode me ajudar?

Pjava
   - 11 out 2013

Pessoal, perdão, esqueci de postar o código, mas agora vai.

Fiz assim e disse que não há suporte de bloco de código nesse contexto. Inclusive coloquei dentro da tag DataItemTemplate e nada também.

<%# if(Eval("VL_RECUPERADO") > 0){%>
<DataItemTemplate>

<%# Eval("VL_RECUPERADO")%>
<a onclick="javascript:PagamentoItensGlosa('<%# Container.KeyValue %>');" style="cursor:pointer">
<dxe:ASPxImage ID="imgPagRecGlosa" runat="server" ImageUrl ="Images/Cruz.png" ImageAlign="AbsBottom"
ToolTip="Clique aqui para que sejam visualizadas as informações de pagamento(s) do recurso(s)">
</dxe:ASPxImage>
</a>

</DataItemTemplate>
<%} %>

Pjava
   - 11 out 2013

Fiz dessa forma e rodou, mas em runtime deu o erro abaixo:

<DataItemTemplate>
<% if (Convert.ToInt32(Eval("VL_RECUPERADO")) > 0)
{ %>
<%# Eval("VL_RECUPERADO")%>
<a onclick="javascript:PagamentoItensGlosa('<%# Container.KeyValue %>');" style="cursor:pointer">
<dxe:ASPxImage ID="imgPagRecGlosa" runat="server" ImageUrl ="Images/Cruz.png" ImageAlign="AbsBottom"
ToolTip="Clique aqui para que sejam visualizadas as informações de pagamento(s) do recurso(s)">
</dxe:ASPxImage>
</a>

<% }%>
</DataItemTemplate>

Erro: Os métodos de ligação de dados como Eval(), XPath() e Bind() só podem ser usados no contexto de um controle limitado por dados.

Pjava
   - 14 out 2013

Veja que eu alterei o meu asp.net, colocando um painel. O que eu não consegui ainda, foi esconder esse painel, para quando o valor de VL_RECUPERADO(que vem do BD e é uma célula no grid) for menor ou igual a zero(0).

#Código

<dxwgv:GridViewDataTextColumn Caption="Valor <br/>Recuperado" FieldName="VL_RECUPERADO" Name="VL_RECUPERADO" 
                                                        VisibleIndex="11" HeaderStyle-HorizontalAlign="Center" HeaderStyle-VerticalAlign="Middle">
                                                        <EditFormSettings Visible="false"/>
                                                        <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                                                        <CellStyle HorizontalAlign="Center" VerticalAlign="Middle" ForeColor="Red" Font-Bold="true" />
                                                        
                                                        <DataItemTemplate>
                                                        <asp:Panel runat="server" ID="pnlPagItensGlosa" >
                                                        <%# Eval("VL_RECUPERADO")%> 
                                                        <a onclick="javascript:PagamentoItensGlosa('<%# Container.KeyValue %>');" style="cursor:pointer">
                                                            <dxe:ASPxImage ID="imgPagRecGlosa" runat="server" ImageUrl ="Images/Cruz.png" ImageAlign="AbsBottom"
                                                                ToolTip="Clique aqui para que sejam visualizadas as informações de pagamento(s) do recurso(s)">
                                                            </dxe:ASPxImage>
                                                        </a>
                                                        </asp:Panel>
                                                        </DataItemTemplate>
                                                        
                                                    </dxwgv:GridViewDataTextColumn>

Pjava
   - 25 out 2013

Em realidade preciso esconder o link quando o valor do campo for menor ou igual a zero. Veja que eu fiz assim e dá erro de objeto não instanciado. Se coloco o Painel direto no código pelo ID dele, o sistema não reconhece o painel. Abaixo o meu ASPx e o meu Código. É tudo que está no DataItemTemplate.

#Código

<dxwgv:GridViewDataTextColumn Caption="Valor <br/>Recuperado" FieldName="VL_RECUPERADO" Name="VL_RECUPERADO" 
                                                        VisibleIndex="11" HeaderStyle-HorizontalAlign="Center" HeaderStyle-VerticalAlign="Middle">
                                                        <EditFormSettings Visible="false"/>
                                                        <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                                                        <CellStyle HorizontalAlign="Center" VerticalAlign="Middle" ForeColor="Red" Font-Bold="true" />

                                                        <DataItemTemplate>
                                                        <asp:Panel runat="server" ID="pnlPagItensGlosa" >
                                                        <%# Eval("VL_RECUPERADO")%> 
                                                        <a onclick="javascript:PagamentoItensGlosa('<%# Eval("NR_GUIA_PRESTADOR") %>');" style="cursor:pointer">
                                                            <dxe:ASPxImage ID="imgPagRecGlosa" runat="server" ImageUrl ="Images/Cruz.png" ImageAlign="AbsBottom"
                                                                ToolTip="Clique aqui para que sejam visualizadas as informações de pagamento(s) do recurso(s)">
                                                            </dxe:ASPxImage>
                                                        </a>
                                                        </asp:Panel>
                                                        </DataItemTemplate>
                                                    </dxwgv:GridViewDataTextColumn>


Aqui está meu código, dentro do meu HtmlRowPrepared. A parte que não funciona, está após o if do VL_Recuperado.

#Código
protected void gvProcedimentos_HtmlRowPrepared(object sender, ASPxGridViewTableRowEventArgs e)
        {
            if (e.RowType != GridViewRowType.Data) return;

            string CodStatusGuia = e.GetValue("COD_STATUS_GUIA").ToString();
            e.Row.ForeColor = getCorCodStatusGuia(CodStatusGuia);

            ASPxImage imgMotivosGlosaP = (ASPxImage)gvProcedimentos.FindRowCellTemplateControl(e.VisibleIndex, null, "imgMotivosGlosaP");

            if (CodStatusGuia.Equals("1") || CodStatusGuia.Equals("2") || CodStatusGuia.Equals("3"))
                imgMotivosGlosaP.Visible = true;
            else
                imgMotivosGlosaP.Visible = false;
//A partir daqui

    if (Convert.ToDecimal(e.GetValue("VL_RECUPERADO").ToString()) <= 0)
            {
                var pnlPagItensGlosa = e.Row.FindControl("pnlPagItensGlosa") as Panel;
                if (pnlPagItensGlosa == null)
                {
                    pnlPagItensGlosa.Visible = false;
                }
            }
        }

Pjava
   - 25 out 2013

Faltou algo importante. Esse Painel, está dentro de uma coluna de um Grid da DevExpress, por isso não consigo pegá-lo diretamente no meu Code Behind, ou seja, somente através de instância mas se eu instanciar, terei um outro objeto e não o declarado no aspx, certo ou errado? Essa é minha dúvida.

Pjava
   - 25 out 2013

Refiz o meu código assim e melhorou, mas ainda não funciona. Por que? Bem, acontece, depois que ele faz as verificações e validações, parece que entra um outro cara, que tem apenas uma coluna ou cell e isso dá erro na verificação do IF. Conversando com os colegas aqui, achamos ser alguma linha de Header e estou apanhando em como ignora isso.

#Código

if (Convert.ToDecimal(e.GetValue("VL_RECUPERADO").ToString()) <= 0)
            {
                var coluna = e.Row.Controls[10] as DevExpress.Web.ASPxGridView.Rendering.GridViewTableBaseCell;
                var pnlPagItensGlosa = coluna.Controls[0].Controls[1] as Panel;
                pnlPagItensGlosa.Visible = false;
            }

Pjava
   - 25 out 2013

Aparentemente resolveu, mas com um problema. Se eu aumentar a quantidade de células no Grid, terei que alterar o IF. Não sei porque, mas estava vindo um grid com apenas uma célula. Abaixo o código.

#Código

if (Convert.ToDecimal(e.GetValue("VL_RECUPERADO").ToString()) <= 0)
            {
                if (e.Row.Cells.Count < 14)
                    return;

                var coluna = e.Row.Controls[10] as DevExpress.Web.ASPxGridView.Rendering.GridViewTableBaseCell;
                var pnlPagItensGlosa = coluna.Controls[0].Controls[1] as Panel;
                pnlPagItensGlosa.Visible = false;
            }