Agregar un lister a los botones de navegacion de un grid
Hola buen día
Tengo un grid y en le tengo anexado una bbar, y al hacerlo en la parte de abajo del grid, me agrega una barrita con un botón de ir a la primera página, a la siguiente, a la anterior o a la última, incluso me permite escribir el número de página que quiero agregar.
En el grid agregué un cuadro de texto que es editable por el usuario para poder hacer algún filtro a la información desplegada en el grid, el detalle está que cuando presione alguno de los botenes de navegación no lleva como parámetro escrito en el cuadro de texto, tons quiero ver la manera de hacerlo o como puedo agregarle un listener nuevo a los botones, o reescribir el que tienen.
Espero haberme explicado.
Saludos y Gracias
imagino que cuando te refieres a que la agregas debajo te refieres al footbar o propiedad [b]fbar[/b] de tu grid, y esos botones para ir a la primera pagina, la siguiente y etc, te refieres al pagingToolbar, no?
pues yo cree en mi proyecto una barra superior, aunque para el paso podría estar también el pagingtoolbar, con un filtro y en el procedimiento de carga del store, que es donde le pasas parámetros al pagingtoolbar, le paso también los parámetros para el filtro, te pego algo de código por si te sirve.
mi store no lo cargo con autoload(), sino que llamo a una funcion que me sirve no solo para filtrar sino también para buscar dentro de mi BD, asi:
cargar_vista : function(){ var st = Ext.getCmp('grilla').getStore(); st.baseParams['tipo_buscar'] = 'texto'; st.baseParams['tipo_filtrar'] = 'texto'; st.baseParams['buscar'] = buscar; st.baseParams['campo_buscar'] = campo_buscar; st.baseParams['filtrar'] = filtrar; st.baseParams['campo_filtrar'] = campo_filtrar; var mascara = new Ext.LoadMask(Ext.getBody(),{ msg : "Cargando datos. Por favor espere...", store : st }).show(); st.load({params : {limit : pagesize}}); }esto me permite gran control sobre lo que devuelve el store, por el lado del php capturo los parametros asi :
$start = (integer) (isset($_POST['start']) ? $_POST['start'] : $_GET['start']); $end = (integer) (isset($_POST['limit']) ? $_POST['limit'] : $_GET['limit']); $sortDir = isset($_POST['dir']) ? $_POST['dir'] : "ASC"; $sortBy = isset($_POST['sort']) ? $_POST['sort'] : "art.descripcion"; $BuscarPor = isset($_POST['buscar']) ? $_POST['buscar'] : ""; $FiltrarPor = isset($_POST['filtrar']) ? $_POST['filtrar'] : ""; $campo_buscar = isset($_POST['campo_buscar']) ? $_POST['campo_buscar'] : ""; $campo_filtrar = isset($_POST['campo_filtrar']) ? $_POST['campo_filtrar'] : ""; if ($BuscarPor != ""){ $tipo_buscar = $_POST['tipo_buscar']; if ($tipo_buscar == 'texto'){ $sqlBuscar = " $BuscarPor LIKE '%$campo_buscar%' "; } else { $sqlBuscar = " $BuscarPor = $campo_buscar "; } } if ($FiltrarPor != ""){ $tipo_filtrar =$_POST['tipo_filtrar']; if ($tipo_filtrar == 'texto'){ $sqlFiltrar = " $FiltrarPor = '$campo_filtrar' "; } else { $sqlFiltrar = " $FiltrarPor = $campo_filtrar "; } } if($sqlBuscar != "" AND $sqlFiltrar != ""){ $sqlFiltros = $sqlBuscar. " AND ".$sqlFiltrar; } else { if ($sqlBuscar != ""){ $sqlFiltros = $sqlBuscar; } else { $sqlFiltros = $sqlFiltrar; } } if ($sqlFiltros != ""){ $sqlFiltros = " WHERE ".$sqlFiltros; } $sql_count = "SELECT art.id_interno, art.descripcion, art.nro_parte, art.marca, pu.unidad, pea.descripcion estado, CONCAT(pu.unidad,' - ',pu.medida) medida FROM $base art LEFT JOIN bdsistema.parametros_unidad pu ON art.id_unidad = pu.id_interno LEFT JOIN bdsistema.parametros_estadoarticulo pea ON art.id_estado = pea.id_interno".$sqlFiltros; $sql = $sql_count . ' ORDER BY ' . $sortBy. ' ' . $sortDir . ' LIMIT '; $sql .= $start . ', '. $end; $result_count = mysql_query($sql_count) or falla("servidor", mysql_errno()); $total = mysql_num_rows($result_count); $arr = array(); $rs = mysql_query($sql) or falla("servidor", mysql_errno()); while($obj = mysql_fetch_object($rs)){ $arr[] = $obj; } Echo '{success:true, total : '.$total.', datos:'.json_encode($arr).'}';espero que te ayude en algo
Hola Gracias por la respuesta.
Me puede poner el código de donde indicas que no sea autoload? y como mandas a llamar la función que creaste llamada "cargar vista"
Por cierto si es como mencionas, el cuadro de texto lo puse en la parte de arriba del grid, que sería como toolbar, y un botón a un lado del cuadro de texto para recargar el grid y ahir le paso los parámetros, lo que no he podido hacer es que cuando presione uno de los botones de la pagingtoolbar, se lo lleve. Tu función se me hace interesante.
Saludos y Gracias
lo que hago es simplemente no configurarle la propiedad autoLoad, sino que despues de definir el grid hago una llamada a la funcion cargar_vista, te envio mi js y mi php por si te sirve echarles un vistazo. hace referencia a otros archivos mas pero cualquier duda pregunta
¿Conoces a alguien que pueda responder esta pregunta? Comparte el link en Twitter o Facebook
Es necesario registrarse para poder participar en el foro! Si ya tienes una cuenta puedes entrar y comentar en este foro.