none
Problema con <%# Container.DataItemIndex.ToString()%> RRS feed

  • Pregunta

  • Tengo este gridview:

    <asp:GridView ID="gv_pacientes" runat="server" AutoGenerateColumns="False" CssClass="body" Width="500px" OnRowDeleting="gv_pacientes_RowDeleting">
                                         <RowStyle BackColor="White" Font-Size="8pt" HorizontalAlign="Center" />
                                         <Columns>
                                             <asp:BoundField DataField="nombre" HeaderText="Paciente" />
                                             <asp:BoundField DataField="tipo" HeaderText="Tipo" />
                                             <asp:TemplateField ShowHeader="False">
                                                 <ItemTemplate>
                                                     <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Select" OnClientClick="mostrar_datos_paciente('<%# Container.DataItemIndex.ToString()%>');" Text="Seleccionar"></asp:LinkButton>
                                                 </ItemTemplate>
                                             </asp:TemplateField>
                                             <asp:CommandField ShowSelectButton="True"  />
                                         </Columns>
                                         <HeaderStyle BackColor="#4A6267" ForeColor="White" HorizontalAlign="Center" />
                                         <AlternatingRowStyle BackColor="White" />
                                     </asp:GridView>

    Cuando leo la funcion javascript siguiente:

        <script>

            function mostrar_datos_paciente(index)
            {
                cpnl_datos_paciente.PerformCallback(index);
            }

        </script>

    El valor de index lo iguala a esto "<%# Container.DataItemIndex.ToString()%>", no se por que no me resuelve el index,  en vez de mandar el index de la fila me envia eso.


    Si mi respuesta fue útil ayudame marcándola como correcta.

    martes, 7 de julio de 2015 19:29

Respuestas

  • La forma correcta es esta:

                                                   

    <asp:GridView ID="gv_pacientes" runat="server" AutoGenerateColumns="False" CssClass="body" Width="500px" OnRowDeleting="gv_pacientes_RowDeleting">
                                         <RowStyle BackColor="White" Font-Size="8pt" HorizontalAlign="Center" />
                                         <Columns>
                                             <asp:BoundField DataField="nombre" HeaderText="Paciente" />
                                             <asp:BoundField DataField="tipo" HeaderText="Tipo" />
                                             <asp:TemplateField ShowHeader="False">
                                                 <ItemTemplate>
     <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Select" OnClientClick=<%# "mostrar_datos_paciente('"+ Container.DataItemIndex.ToString() + "')" %> Text="Seleccionar"></asp:LinkButton>
                                                 </ItemTemplate>
                                             </asp:TemplateField>
                                             <asp:CommandField ShowDeleteButton="True" />
                                         </Columns>
                                         <HeaderStyle BackColor="#4A6267" ForeColor="White" HorizontalAlign="Center" />
                                         <AlternatingRowStyle BackColor="White" />
                                     </asp:GridView>

    Por que, la vd noo lo se, pero ya quedo


    Si mi respuesta fue útil ayudame marcándola como correcta.

    • Marcado como respuesta PIO DEVELOPER martes, 7 de julio de 2015 21:23
    martes, 7 de julio de 2015 21:23

Todas las respuestas

  • hola

    es que ese codigo deberias generarlo en el evento RowDataBound, algo como ser

    public void gv_pacientes_RowDataBound(...){
    
        LinkButton link1 = e.Row.FindControl("LinkButton1") as LinkButton;
    
       link1.Attributes["click"] = string.Format("mostrar_datos_paciente('{0}');", e.Row.RowIndex);
    
    }

    es mas simple generarlo desde codigo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 7 de julio de 2015 19:40
  • Bien habia visto la posibilidad que publicas, pero aun asi, no es posible hacerlo como yo lo propongo?

    Si mi respuesta fue útil ayudame marcándola como correcta.

    martes, 7 de julio de 2015 19:41

  • puede que el problema venga por como usas las comillas, intenta invertirlas

    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 7 de julio de 2015 19:46
  • No funco leandro, no ejecuta el codigo

    Si mi respuesta fue útil ayudame marcándola como correcta.

    martes, 7 de julio de 2015 20:11
  • no entendi, que codigo no ejecuta?

    recordaste asignar el evento del gridview al RowDataBound ? ademas recuerda que este ejecuta cuando asignas el dataspource y realizas el databind()

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 7 de julio de 2015 20:31
  • I asi es ya debuguee y si entra al rowdatabound, pero al dar click al linbutton no me envia al evento javascript

    Si mi respuesta fue útil ayudame marcándola como correcta.

    martes, 7 de julio de 2015 20:37
  • La forma correcta es esta:

                                                   

    <asp:GridView ID="gv_pacientes" runat="server" AutoGenerateColumns="False" CssClass="body" Width="500px" OnRowDeleting="gv_pacientes_RowDeleting">
                                         <RowStyle BackColor="White" Font-Size="8pt" HorizontalAlign="Center" />
                                         <Columns>
                                             <asp:BoundField DataField="nombre" HeaderText="Paciente" />
                                             <asp:BoundField DataField="tipo" HeaderText="Tipo" />
                                             <asp:TemplateField ShowHeader="False">
                                                 <ItemTemplate>
     <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Select" OnClientClick=<%# "mostrar_datos_paciente('"+ Container.DataItemIndex.ToString() + "')" %> Text="Seleccionar"></asp:LinkButton>
                                                 </ItemTemplate>
                                             </asp:TemplateField>
                                             <asp:CommandField ShowDeleteButton="True" />
                                         </Columns>
                                         <HeaderStyle BackColor="#4A6267" ForeColor="White" HorizontalAlign="Center" />
                                         <AlternatingRowStyle BackColor="White" />
                                     </asp:GridView>

    Por que, la vd noo lo se, pero ya quedo


    Si mi respuesta fue útil ayudame marcándola como correcta.

    • Marcado como respuesta PIO DEVELOPER martes, 7 de julio de 2015 21:23
    martes, 7 de julio de 2015 21:23
  • hola

    si inspeccionas el html usando el developer tools del browser, puedes ver que el evento click del servidor esta definido ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 7 de julio de 2015 21:31