Chamar ou não um javascript
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
Curtidas 0
Respostas
Pjava
11/10/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>
<%} %>
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>
<%} %>
GOSTEI 0
Pjava
11/10/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.
<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.
GOSTEI 0
Pjava
11/10/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).
<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>
GOSTEI 0
Pjava
11/10/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.
Aqui está meu código, dentro do meu HtmlRowPrepared. A parte que não funciona, está após o if do VL_Recuperado.
<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.
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; } } }
GOSTEI 0
Pjava
11/10/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.
GOSTEI 0
Pjava
11/10/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.
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; }
GOSTEI 0
Pjava
11/10/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.
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; }
GOSTEI 0