none
Problema para obtener valor del control de GridView RRS feed

  • Pregunta

  • Tengo un checkbox en cada fila del gridview el problema es que cuando obtengo el valor desde c# no lo toma bien, parece que toma el valor por defecto que le pongo, si le pongo Checked = "True" lo toma como true pero si lo cambio a False en la pagina lo sigue tomando como True

    Asi obtengo el valor del control:

    for (int i = 0; i < gvUsuarios.Rows.Count; i++)
                {
                    if (((CheckBox)gvUsuarios.Rows[i].FindControl("chkSelect")).Checked)
                    {
                        new ConexionSQL().LeerDatos("exec Usuarios "
                            + gvUsuarios.Rows[i].Cells[2].Text
                            +  "," + Session["Id"].ToString()
                            +  "," + ID
                            + ",'1'"
                            );
                    }
                }

    Asi esta la tabla:

        <div class="row">
            <div class="col-lg-6 col-md-6">
                <label>Seleccione los usuarios:</label>
                <asp:Panel ID="Panel1" runat="server" BorderStyle="Solid" HorizontalAlign="Center">
                    <asp:GridView
                        ID="gvUsuarios"
                        runat="server"
                        class="table table-striped table-bordered table-hover">
    
                        <EmptyDataRowStyle ForeColor="Green" CssClass="table table-bordered" />
                        <EmptyDataTemplate>
                            ¡No hay usuarios asignados!  
                        </EmptyDataTemplate>
                        <Columns>
                            <asp:TemplateField ItemStyle-HorizontalAlign="Center" HeaderText="Select" HeaderStyle-Width="70px">
                                <ItemTemplate>
                                    <asp:CheckBox ID="chkSelect" runat="server" AutoPostBack="false" />
                                </ItemTemplate>
                            </asp:TemplateField>
    
                            <asp:TemplateField ItemStyle-HorizontalAlign="Center" HeaderText="Permisos" HeaderStyle-Width="70px">
                                <ItemTemplate>
                                    <asp:CheckBox ID="chkPermisoEditar" runat="server" AutoPostBack="false" Text="Editar" />
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>
                </asp:Panel>
            </div>
        </div>

    viernes, 14 de julio de 2017 17:22

Respuestas

  • El problema es que cuando cambias el valor no se realiza un postback, lo cual hace que solo se realice el cambio en el frontend, debes de habilitar en el control la propiedad AutoPostBack en true. Sin embargo esto supone una recarga de la página completa.

    También puedes usar los controles ajax para encapsular el control CheckBox o el grid completo y así solo recargas el control al dar clic en el y solucionas el problema.

    • Propuesto como respuesta cmarinp viernes, 14 de julio de 2017 20:43
    • Marcado como respuesta luisz15 lunes, 17 de julio de 2017 17:16
    viernes, 14 de julio de 2017 20:43

Todas las respuestas

  • El problema es que cuando cambias el valor no se realiza un postback, lo cual hace que solo se realice el cambio en el frontend, debes de habilitar en el control la propiedad AutoPostBack en true. Sin embargo esto supone una recarga de la página completa.

    También puedes usar los controles ajax para encapsular el control CheckBox o el grid completo y así solo recargas el control al dar clic en el y solucionas el problema.

    • Propuesto como respuesta cmarinp viernes, 14 de julio de 2017 20:43
    • Marcado como respuesta luisz15 lunes, 17 de julio de 2017 17:16
    viernes, 14 de julio de 2017 20:43
  • El problema es que cuando cambias el valor no se realiza un postback, lo cual hace que solo se realice el cambio en el frontend, debes de habilitar en el control la propiedad AutoPostBack en true. Sin embargo esto supone una recarga de la página completa.

    También puedes usar los controles ajax para encapsular el control CheckBox o el grid completo y así solo recargas el control al dar clic en el y solucionas el problema.


    Gracias por tu ayuda, con lo que me explicaste solo puse un if (!Page.IsPostBack) y es lo mismo que me dijiste pero mas censillo, muchas gracias :D
    lunes, 17 de julio de 2017 17:17