none
Capturar el ID de un registro seleccionado en una grilla JQGrid con: onSelectRow: function(ids) {…} RRS feed

  • Pregunta

  • Hola gente, a ver si alguien pueden ayudarme con lo siguiente:

    Estoy trabajando con C# en ASP Net y mi idea es usar una grilla JQGrid de modo tal que al seleccionar una fila, capture el ID del registro seleccionado para luego ser  procesado por una Web Form frmDetalle.aspx.

    Por ejemplo, la lista JQGrid  me muestra y para ver el detalle de una persona en particular lo selecciono, capturo el ID con:  onSelectRow: function(ids) {…}  y le pase el ID a un  método de la clase frmDetalle.aspx.cs.

    Mi duda es como capturo el ID del registro seleccionado en la grilla JQGrid  dentro de la clase frmDetalle.aspx.cs . O sea no tengo forma de pasar parámetros entre lo que veo en la grilla y lo que tengo en mis clases aspx.cs.

    Por favor si alguien tiene código de la función onSelectRow: function(ids) {…}   y del método que iría en la clase aspx.cs  para capturar el ID seleccionado.  Desde ya muchas gracias.
    miércoles, 20 de octubre de 2010 23:53

Respuestas

  • Buenas,

    gracias, @JTorrecilla, por la referencia. ;-)

    Chaman, por tus indicaciones, creo que no estás usando MVC (¡pruébalo!) sino Webforms.

    Ante todo, debes tener claro la ubicación de los procesos. jqGrid se ejecuta en cliente (es javascript), mientras que el código del code-behind (.aspx.cs) se ejecuta en servidor, por lo que no puedes hacer una llamada de uno a otro de forma directa.

    Hay varias soluciones para esto. Una es la que explica perfectamente @JTorrecilla, llevar al usuario a otra página desde el tratamiento del evento onSelectRow, por ejemplo, modificando el location.href, hacia una nueva página a la que envías en el querystring el parámetro id. Es decir, el salto sería algo así como location.href="detalle.aspx?id="+ids, y la recogida del dato podría ser desde el evento Load().

    Como parte negativa, es conveniente indicar que pierdes el estado de la página del grid, es decir, una vez que has llevado al usuario a la página de detalle, la vuelta atrás implicaría recargar el grid, por lo que se perdería la selección y datos de paginación.

    Otra posibilidad sería obtener mediante Ajax los datos de la persona seleccionada y mostrarlos sobre la misma página. Para ello puedes utilizar, por ejemplo, Webmethods (puedes leer algunos ejemplos de uso aquíaquí o aquí) para llamar a métodos estáticos (definidos en el code-behind), e introducir el resultado en la página.

    Y una última, que quizás la más sencilla en escenarios simples, jqGrid permite visualizar los registros no sólo como rejilla, sino también en forma de pantalla de detalle. En esta demo del producto (new in version 3.5 > form navigation) verás que hay un botón para "visualizar" un registro, que abre una pantalla de detalle integrada en la rejilla.

    Espero que te sea de ayuda

    Saludos.


    José M. Aguilar
    Variable not found
    • Marcado como respuesta El Chaman jueves, 21 de octubre de 2010 21:59
    jueves, 21 de octubre de 2010 6:55
  • Lo podrías pasar por el queryString y capturarlo en el load de frmDetalle

    en la parte relativa al JQGrid, puedes definir el evento OnSelectRow( Ejemplo en la página de JMAgquilar)

    Como verás utiliza una function (id) y saca un mensaje con alert, en lugar de eso podrias poner:

     

    window.Location='tuurl/frmDetalle.aspx?idDetalle=' + id;

     

    Con eso te abrirá la pa´gina que tu quieras y para capturar el id en el form:

     

    Dentro del evento Load

     

    string id = Request.QueryString("idDetalle");

     


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    • Marcado como respuesta El Chaman jueves, 21 de octubre de 2010 21:42
    jueves, 21 de octubre de 2010 5:58

Todas las respuestas

  • Lo podrías pasar por el queryString y capturarlo en el load de frmDetalle

    en la parte relativa al JQGrid, puedes definir el evento OnSelectRow( Ejemplo en la página de JMAgquilar)

    Como verás utiliza una function (id) y saca un mensaje con alert, en lugar de eso podrias poner:

     

    window.Location='tuurl/frmDetalle.aspx?idDetalle=' + id;

     

    Con eso te abrirá la pa´gina que tu quieras y para capturar el id en el form:

     

    Dentro del evento Load

     

    string id = Request.QueryString("idDetalle");

     


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    • Marcado como respuesta El Chaman jueves, 21 de octubre de 2010 21:42
    jueves, 21 de octubre de 2010 5:58
  • Buenas,

    gracias, @JTorrecilla, por la referencia. ;-)

    Chaman, por tus indicaciones, creo que no estás usando MVC (¡pruébalo!) sino Webforms.

    Ante todo, debes tener claro la ubicación de los procesos. jqGrid se ejecuta en cliente (es javascript), mientras que el código del code-behind (.aspx.cs) se ejecuta en servidor, por lo que no puedes hacer una llamada de uno a otro de forma directa.

    Hay varias soluciones para esto. Una es la que explica perfectamente @JTorrecilla, llevar al usuario a otra página desde el tratamiento del evento onSelectRow, por ejemplo, modificando el location.href, hacia una nueva página a la que envías en el querystring el parámetro id. Es decir, el salto sería algo así como location.href="detalle.aspx?id="+ids, y la recogida del dato podría ser desde el evento Load().

    Como parte negativa, es conveniente indicar que pierdes el estado de la página del grid, es decir, una vez que has llevado al usuario a la página de detalle, la vuelta atrás implicaría recargar el grid, por lo que se perdería la selección y datos de paginación.

    Otra posibilidad sería obtener mediante Ajax los datos de la persona seleccionada y mostrarlos sobre la misma página. Para ello puedes utilizar, por ejemplo, Webmethods (puedes leer algunos ejemplos de uso aquíaquí o aquí) para llamar a métodos estáticos (definidos en el code-behind), e introducir el resultado en la página.

    Y una última, que quizás la más sencilla en escenarios simples, jqGrid permite visualizar los registros no sólo como rejilla, sino también en forma de pantalla de detalle. En esta demo del producto (new in version 3.5 > form navigation) verás que hay un botón para "visualizar" un registro, que abre una pantalla de detalle integrada en la rejilla.

    Espero que te sea de ayuda

    Saludos.


    José M. Aguilar
    Variable not found
    • Marcado como respuesta El Chaman jueves, 21 de octubre de 2010 21:59
    jueves, 21 de octubre de 2010 6:55
  • Hola @JTorrecilla, me ha sido de gran utilidad tu respuesta y por fin gracias a tu ayuda pude conseguir que funcionara.

    Una acotación a tu respuesta sería la siguiente:

     

    La sentencia:

    window.Location='tuurl/frmDetalle.aspx?idDetalle=' + id;

     

    la hice funcionar con éstas leves modificaciones:

    window.Location="frmDetalle.aspx?idDetalle=" + id;

     

    mientras que:

    string id = Request.QueryString("idDetalle");

     

    le hice la siguiente modificación para que me funcionara:

    string id = Request.QueryString["idDetalle"];

     

    Reitero mi agradecimiento y la prontitud de tu respuesta.

    Saludos!!

    El Chaman

    jueves, 21 de octubre de 2010 21:45
  • Hola José, ante todo quiero agradecerte por aclarar mi duda.

    Por ahora implementé la primer solución, la cuál como bien mencionaste tiene la desventaja que implica perder la selección y los datos de paginación por lo que voy a investigar tu segunda solución referida a los Webmethods que si bien algo manejo, estoy un poco escaso de conocimientos.

     Mi idea es reemplazar la no muy eficiente GridView por JQGrid y hacer uso de Ajax.

    También voy a probar MVC, así que en cualquier momento te estoy molestando con nuevas consultas.

    Reitero mi profundo agradecimiento tanto a vos como a @JTorrecilla

    Saludos!!

    El Chaman

    jueves, 21 de octubre de 2010 22:00