none
Funcion JavaScript para un GridView RRS feed

  • Pregunta

  • Hola colegas.
    Tengo el siguiente problemilla.

    Tengo en una pagina un detalle de un registro y una grilla. En el detalle siempre va estar el registro donde este posicionada la grilla. Si el el usuario va hacia adelante, hacia atraz, al ultimo, al primero etc, tomo el primer registro de esa grilla y refresco el detalle.Esta pagina tiene opciones de agregar,modificar, consultar etc.

    Ahora bien, donde tengo el problema?. Cuando el usuario clickea en agregar yo monto una pagina popup (Ventana Modal) donde el usuario tiene la posibilidad de seleccionar un registro.  Como hago via JavaScript para traerme esa fila seleccionada (codigo de pais, codigo de area, numero de telefono) a la pagina padre?.

    Ya tengo parte del problema resuelto, en la ventana modal yo me creo una funcion javascript que invoco cuando el usuario clickea en Select de la grilla, en esa funcion me declare un array y le movi unos datos en codigo duro y logre recogerlos en la pagina padre. Pero como demonios le entro al rowselected de la grilla en esa funcion para tomar esos tres datos. He alli el problema.
    Agradezco la ayuda que me puedan prestar.

    Douglas 

    jueves, 23 de octubre de 2008 1:05

Todas las respuestas

  • Hola Douglas,

     

    A ver si este ejemplo te sirve:

     

    Code Snippet

    <script language="javascript" type="text/javascript">
    var gridViewCtlId = '<%=ctlGridView.ClientID%>';
        var gridViewCtl = null;
        var curSelRow = null;
        var curRowIdx = -1;
        function getGridViewControl()
        {
            if (null == gridViewCtl)
            {
                gridViewCtl = document.getElementById(gridViewCtlId);
            }
        }
       
        function onGridViewRowSelected(rowIdx)
        {
            var selRow = getSelectedRow(rowIdx);
            if (null != selRow)
            {
                curSelRow = selRow;
                var cellValue = getCellValue(rowIdx, 0);
                alert(cellValue);
            }
        }
       
        function getSelectedRow(rowIdx)
        {
            return getGridRow(rowIdx);
        }
       
        function getGridRow(rowIdx)
        {
            getGridViewControl();
            if (null != gridViewCtl)
            {
                return gridViewCtl.rows[rowIdx];
            }
            return null;
        }
       
        function getGridColumn(rowIdx, colIdx)
        {
            var gridRow = getGridRow(rowIdx);
            if (null != gridRow)
            {
                return gridRow.cells[colIdx];
            }
            return null;
        }
       
        function getCellValue(rowIdx, colIdx)
        {
            var gridCell = getGridColumn(rowIdx, colIdx);
            if (null != gridCell)
            {
                return gridCell.innerText;
            }
            return null;
        }
    </script>

     

     

    Espero que te sea de ayuda!,

     

    si es asi, por favor, colabora con el foro y marca esta respuesta como válida ("¿Ha resultado útil este mensaje?") Wink

     

    Gracias!!

    viernes, 24 de octubre de 2008 8:02
  • Gracias compañero. Ahora observo en tu codigo que hay que pasarle el rowindex? Inicialmente la intencion mía era capturarlo dentro de la funcion javascript, pero tambien es valido si lo envío. Pero la verdad he probado enviandole this, SelectedRowIndex y el dato que llega al JavaScript es nulo. Cual es la sintaxis para enviarlo?. Tambien encontre en la web, no lo tengo muy claro, que esta propiedad no es atrapable del lado del cliente porque corresponde exclusimente al servidor, es decir se activa cuando ocurre el postback.Repito no lo tengo muy claro lo que ese feature quiere decir.

     

    Una solucion que se me ocurre para destrabar el juego es que cuando el usuario seleccione el registro en la grilla por el evento SelectedIndexChanged mover el detalle de esa fila a unos textbox en la pagina y colcarle un boton de cerrar a la ventana modal, de manera que cuando el usuario la cierre ejecutar un javascript leer esos datos (textbox) y devolverlos a la pagina padre.

     

    Agradezco sus comentarios y gracias por su tiempo.

    Saludos

    Douglas

    Caracas

    domingo, 26 de octubre de 2008 11:36
  • Hola,

     

    debes añadir los atributos al crear los rows (en el servidor!), mira te dejo código de muestra:

     

    Code Snippet

    using System.Web;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using AjaxControlToolkit;

    using System.Web.Security;

    public partial class _Default : System.Web.UI.Page

    {

    private int m_iRowIdx = 0;

    protected void Page_Load(object sender, EventArgs e)

    {

    }

    protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)

    {

    if (e.Row.RowType == DataControlRowType.DataRow)

    {

    e.Row.Attributes.Add("onclick", "onGridViewRowSelected('" + m_iRowIdx.ToString() + "')");

    }

    }

    }

     

     

    y el código ASP es este:

     

    Code Snippet

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">

    <head runat="server">

    <title></title>

    </head>

    <script language="javascript" type="text/javascript">

    var gridViewCtlId = '<%=GridView1.ClientID%>';

    var gridViewCtl = null;

    var curSelRow = null;

    var curRowIdx = -1;

    function getGridViewControl()

    {

    if (null == gridViewCtl)

    {

    gridViewCtl = document.getElementById(gridViewCtlId);

    }

    }

    function onGridViewRowSelected(rowIdx)

    {

    var selRow = getSelectedRow(rowIdx);

    if (null != selRow)

    {

    curSelRow = selRow;

    var cellValue = getCellValue(rowIdx, 0);

    alert(cellValue);

    }

    }

    function getSelectedRow(rowIdx)

    {

    return getGridRow(rowIdx);

    }

    function getGridRow(rowIdx)

    {

    getGridViewControl();

    if (null != gridViewCtl)

    {

    return gridViewCtl.rows[rowIdx];

    }

    return null;

    }

    function getGridColumn(rowIdx, colIdx)

    {

    var gridRow = getGridRow(rowIdx);

    if (null != gridRow)

    {

    return gridRow.cells[colIdx];

    }

    return null;

    }

    function getCellValue(rowIdx, colIdx)

    {

    var gridCell = getGridColumn(rowIdx, colIdx);

    if (null != gridCell)

    {

    return gridCell.innerText;

    }

    return null;

    }

    </script>

     

    <body>

    <form id="form1" runat="server">

    <div>

    <asp:GridView ID="GridView1" runat="server" onrowcreated="GridView1_RowCreated"

    onselectedindexchanged="GridView1_SelectedIndexChanged">

    </asp:GridView>

    </div>

    </form>

    </body>

    </html>

     

     

     

    Espero que te ayude! Si es asi marca la respuesta como válida para que otros usuarios con el mismo problema localicen esta solución! Wink

     

    Gracias!!

    • Propuesto como respuesta Marc Rubiño lunes, 18 de mayo de 2009 19:42
    lunes, 27 de octubre de 2008 11:34