2011-07-29 11 views
6

Estoy construyendo mi primera aplicación ASP.NET MVC 3 y estoy usando jqGrid. Una de mis columnas, "Flavor Created", es una columna de fecha y me gustaría filtrar la cuadrícula en esa columna usando DatePicker. Esto es lo que sucede actualmente: el usuario hace clic en el cuadro de filtro de encabezado de columna, se muestra el selector de fecha y luego el usuario elige el año, mes y clics por día. El selector se va y deja la fecha, por ejemplo, 28/03/2009, en el cuadro de texto. Para que realmente funcione el filtro, tengo que hacer clic en ese cuadro y presionar la tecla Intro, que es un poco molesto para el usuario.jqGrid Filtro DatePicker sin presionar la tecla Entrar

¿Hay alguna manera de que el filtro se active automáticamente cuando el usuario hace clic ese día?

(Dicho sea de paso, no estoy seguro de lo que el uso del botón 'Done' es porque desde el selector desaparece cada vez que hago clic en un día. Tal vez por un entorno que me falta.)

¿Alguien más necesitó esta funcionalidad y la resolvió?

he tratado de hacer algo como esto:

dataInit: function (elem) { 
    $(elem).datepicker({ changeYear: true, changeMonth: true, showButtonPanel: true, 
    onSelect: function (dateText, inst) { 
     $("#icecreamgrid")[0].trigger("reloadGrid"); 
    } 
    }) 
} 

como vi a alguien en algún sitio web sugerir, pero eso no parece funcionar.

Respuesta

16

Usted puede tratar con

dataInit: function (elem) { 
    $(elem).datepicker({ 
     changeYear: true, 
     changeMonth: true, 
     showButtonPanel: true, 
     onSelect: function() { 
      if (this.id.substr(0, 3) === "gs_") { 
       // in case of searching toolbar 
       setTimeout(function(){ 
        myGrid[0].triggerToolbar(); 
       }, 50); 
      } else { 
       // refresh the filter in case of 
       // searching dialog 
       $(this).trigger("change"); 
      } 
     }  
    }); 
} 

ACTUALIZADO: A partir de la versión 4.3.3 jqGrid inicializar el DOM de la cuadrícula como this de dataInit. Por lo tanto, no es necesario utilizar la variable myGrid en el código anterior. En lugar de que uno puede utilizar:

dataInit: function (elem) { 
    var self = this; // save the reference to the grid 
    $(elem).datepicker({ 
     changeYear: true, 
     changeMonth: true, 
     showButtonPanel: true, 
     onSelect: function() { 
      if (this.id.substr(0, 3) === "gs_") { 
       // in case of searching toolbar 
       setTimeout(function() { 
        self.triggerToolbar(); 
       }, 50); 
      } else { 
       // refresh the filter in case of 
       // searching dialog 
       $(this).trigger("change"); 
      } 
     }  
    }); 
} 

gratuito jqGrid llama con el segundo parámetro de optionsdataInit, que contiene información adicional, como la propiedad mode. El valor de la propiedad mode es "filter" en caso de llamar dentro de la barra de herramientas de filtro (y "search" en caso de diálogo de búsqueda). Por lo tanto, uno puede usar el siguiente código

dataInit: function (elem, options) { 
    var self = this; // save the reference to the grid 
    $(elem).datepicker({ 
     changeYear: true, 
     changeMonth: true, 
     showButtonPanel: true, 
     onSelect: function() { 
      if (options.mode === "filter") { 
       // in case of searching toolbar 
       setTimeout(function() { 
        self.triggerToolbar(); 
       }, 0); 
      } else { 
       // refresh the filter in case of 
       // searching dialog 
       $(this).trigger("change"); 
      } 
     }  
    }); 
} 
+1

Eso funciona bastante bien Oleg. Gracias. Al presionar Esc se produce el GET, pero puedo vivir con eso, no estoy recuperando esa cantidad de datos. Es posible que pueda llamar a un func que comprueba antes de llamar a triggerToolbar(). – itsmatt

+1

Probablemente debería llamar a 'triggerToolbar' dentro de' onSelect' y no dentro de 'onClose' Puede describir exactamente en qué situación desea forzar la búsqueda en la barra de herramientas y en qué no. En general, 'onSelect' es el evento al que se llama si el usuario elige una nueva fecha. – Oleg

+0

Sí, eso funciona mucho mejor. Mejor, Matt – itsmatt

Cuestiones relacionadas