Comunidad de diseño web y desarrollo en internet online

ayuda con filtro de DataGrid que no me funciona

Citar            
MensajeEscrito el 15 Feb 2009 12:16 pm
Hola a todos!!

En primer lugar, os pido paciencia, ya que soy novato en programación de datos desde flash.

Uso Flash MX Professional version 7.0.1 de 2004.
El problema es que tengo un DataGrid que uso con un DataSet para mostrar datos de una base de datos que previamente he pasado a XML creandome un programita en .ASP.

El filtro, funciona bien cuando se trata de valores numéricos. Pero si intento filtrar una columna cuyos valores son texto, no me hace nada o me muestra todo con el valor de busuqeda que he indicado, repetido en la columna.

Este es el codigo, de ejemplo:

Código :

//Cargamos el XML
miXML.ignoreWhite = true;
miXML.onLoad = function(success){
   //Cargamos y llenamos el array
   if (success){
      for (i=0; i<miXML.firstChild.childNodes.length; i+=3){
      datosProcesos.addItem(
                                {Proceso: miXML.firstChild.childNodes[i].firstChild,
                   ID: parseInt(miXML.firstChild.childNodes[i+1].firstChild),
      Memoria: parseInt(miXML.firstChild.childNodes[i+2].firstChild)});
      }
      //Asignamos al DataSet y al DataGrid
      datos.items = datosProcesos;
      datos.filtered = true;
      procesos_grid.dataProvider = datos.dataProvider;
      
         }
}
miXML.load("xml/procesos.xml");


// FILTRAMOS
..........
   
   //Función filterFunc de Flash
   datos.filterFunc = function(registro:Object) {
      return(registro.Proceso = "explorer");
   }
}
filtrar_btn.addEventListener("click", alClicar);


Como veis, solo he dejado el código significativo.
Podeis ver en el ejemplo, que en la función 'filterFunc', hago referencia a la columna Proceso, que muestra texto.
el literal 'explorer', existe, pero al ejecutar el codigo, me muestra 'explorer' repetido en la columna procesos y el resto
de las columnas sigue igual, sin embargo, cuando filtro un valor numerico de otra columna, todo funciona bie.

¿alguien sabe que puede pasar?
:shock:

Por jfaflash

11 de clabLevel



 

España

msie7
Citar            
MensajeEscrito el 15 Feb 2009 07:28 pm
Hola, prueba con esto:

Código ActionScript :

datos.filterFunc = function(registro:Object) {
      return registro.Proceso == "explorer";
}


Suerte.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 15 Feb 2009 08:46 pm
Nada.

Cuando aplico el filtro, me desaparecen los registros del grid.
:cry:

Por jfaflash

11 de clabLevel



 

España

msie7
Citar            
MensajeEscrito el 15 Feb 2009 09:03 pm
teoricamente, debes de regresar un valor Boolean que indica si ese "registro" se debe desplegar, puede ser que no tengas los valores adecuados. dime que mensajes te muestra esto?

Código ActionScript :

datos.filterFunc = function(registro:Object) { 
      trace(registro.Proceso+" == explorer -> "+(registro.Proceso == "explorer"));
      return registro.Proceso == "explorer"; 
}

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 16 Feb 2009 04:14 pm
:roll: mmmmmm

Es curioso, pues al aplicar el filtro desaparecen todos los registros del grid. Pero lo mas raro es que el 'trace' no muestra nada y debería mostrar aunque sea el literal que le pasamos entre comillas.

Por jfaflash

11 de clabLevel



 

España

msie7
Citar            
MensajeEscrito el 16 Feb 2009 06:54 pm
mmm, podrias postear todo el codigo del filtreo?

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 16 Feb 2009 07:20 pm
Si lo prefieres, puedo enviartelo por email.... :?

Por jfaflash

11 de clabLevel



 

España

msie7
Citar            
MensajeEscrito el 16 Feb 2009 07:22 pm
No te preocupes, nadamas esta parte:

Código ActionScript :

// FILTRAMOS
..........
   
   //Función filterFunc de Flash
   datos.filterFunc = function(registro:Object) {
      return(registro.Proceso = "explorer");
   }
}

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 16 Feb 2009 07:44 pm
Aquí está.
Como puedes ver, lo he adaptado a mi proyecto.

Código :

//Función filterFunc de Flash
datos.filterFunc = function(registro:Object) {        
trace(registro.poblacion+" == Estepona -> "+(registro.poblacion == "Estepona"));       
return registro.poblacion == "Estepona";  } 

Por jfaflash

11 de clabLevel



 

España

msie7
Citar            
MensajeEscrito el 16 Feb 2009 10:07 pm
hola, lo que pasa es que no estas generando los eventos, la filterfunc ya la vi, pero quiciera que postearas el codigo donde aprietas el boton o algo asi que invoca al filtro, ademas, aqui en el onLoad borra una linea:

Código ActionScript :

miXML.onLoad = function(success){
   //Cargamos y llenamos el array
   if (success){
      for (i=0; i<miXML.firstChild.childNodes.length; i+=3){
      datosProcesos.addItem(
                                {Proceso: miXML.firstChild.childNodes[i].firstChild,
                   ID: parseInt(miXML.firstChild.childNodes[i+1].firstChild),
      Memoria: parseInt(miXML.firstChild.childNodes[i+2].firstChild)});
      }
      //Asignamos al DataSet y al DataGrid
      datos.items = datosProcesos;
      //datos.filtered = true;
      procesos_grid.dataProvider = datos.dataProvider;
      
   }
}


Pd. posteala tal cual la tienes. Suerte.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 16 Feb 2009 10:25 pm
Ok,

quí va posteada tal cual.

Código :

// FILTRAMOS
alClicar.click = function(){
   //Si no hay filtro lo ponemos y cambiamos el texto en el botón
   if (datos.filtered == false){
      datos.filtered = true;
      datos.filterFunc();
      btnBuscar.label = "Quitar Filtro";
   }
   //Si hay filtro lo quitamos y cambiamos el texto en el botón
   else if (datos.filtered == true){
      datos.filtered = false;
      btnBuscar.label = "Filtrar";
   }
   
   //Función filterFunc de Flash
   datos.filterFunc = function(registro:Object) {        
   trace(registro.poblacion+" == Estepona -> "+(registro.poblacion == "Estepona"));       
   return registro.poblacion == "Estepona";  } 
   
   //datos.filterFunc = function(registro:Object) {
      // return registro.poblacion == "Marbella";
   //}
}
btnBuscar.addEventListener("click", alClicar);

Por jfaflash

11 de clabLevel



 

España

msie7
Citar            
MensajeEscrito el 16 Feb 2009 10:38 pm
Hola

Código ActionScript :

alClicar.click = function( e:Object ){
   datos.filtered = !datos.filtered;
   //Función filterFunc de Flash
   datos.filterFunc = function(registro:Object):Boolean
   {
      trace(registro.poblacion+" == Estepona -> "+(registro.poblacion == "Estepona"));       
      return registro.poblacion == "Estepona";  
   };
   btnBuscar.label = ( datos.filtered ) ? "Quitar Filtro" : "Filtrar" ;
}


Espero que sea eso. Suerte.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 17 Feb 2009 08:13 am
Hola,

He probato el código de filtro y ocurre algo curioso. Si filtro un campo numerico cargado en el array del grid así:

Código :

 cp: parseInt( miXML.firstChild.childNodes[i+3].firstChild ),


Entonces me filtra bien con tu codigo que me pasastes ayer.

Código :

// FILTRAMOS
alClicar.click = function(e:Object){
   datos.filtered = !datos.filtered;
   
   //Función filterFunc de Flash
   datos.filterFunc = function(registro:Object):Boolean 
   {        
      return registro.cp == "29600"; 
      // return registro.poblacion=="Estepona"; 
      }; 
   btnBuscar.label = ( datos.filtered ) ? "Quitar Filtro" : "Filtrar" ;  
}
btnBuscar.addEventListener("click", alClicar);


Pero si en lugar de ese campo, utilizo uno tipo texto, entonces sigue sin mostrar nada.

De cualquier forma, agradezco mucho tu ayuda y tu inestimable paciencia.
Muchas gracias

:)

Por jfaflash

11 de clabLevel



 

España

msie7
Citar            
MensajeEscrito el 17 Feb 2009 10:29 am
Por fin!!!

He conseguido averiguar porqué no funcionaban los filtros.
Sin duda, se debe a mi ignorancia y desconocimiento con respecto a actionscript con base de datos.

Encontré un tutorial y esto es lo que le faltaba al codigo.

Código :

datos.filterFunc = function(registro:Object) 
{
    return registro.poblacion.nodeValue == "poblacion";
}


Le faltaba añadirle el nodeValue

Lo dejo a disposición de quien pueda necesitarlo.
^^

Por jfaflash

11 de clabLevel



 

España

msie7
Citar            
MensajeEscrito el 17 Feb 2009 06:07 pm
:o jeje "nodeValue", quien lo hubiera pensado.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 26 Abr 2009 12:29 am
Hola, necesito ayuda con la función filtrar
datos.filterFunc = function(registro:Object) {
return(registro.Memoria >= maxMem_txt.text);
}
Quiero hacer el filtro por un rcampo de texto, filtrar los que empiezan o contienen una caracter o varios, es decir, como utilizo en sql el LIKE, como puedo hacerlo aquí??

Gracias de antemano.
Un Saludo
Silvia

Por Silviayo

3 de clabLevel



 

msie7
Citar            
MensajeEscrito el 26 Abr 2009 05:50 am
Hola, bueno, el operador LIKE utiliza expresiones regulares y demas chuches que toman mas tiempo de implementar la programacion, lo que podriamos implementar como un LIKE basico, seria que las cadenas que se filtraran, contienen los mismos caracteres que la cadena en el campo de texto, en algun lado y sin distinguir de Mayusculas y minusculas:

Código ActionScript :

datos.filterFunc = function( registro:Object ):Boolean
{
   var cad1:String = registro.Memoria.toLowerCase();
   var cad2:String = maxMem_txt.text.toLowerCase();
   return cad1.indexOf( cad2 ) > 0 ? true : false ;
}


Aqui sigo con la duda del post anterior, si es necesario usar registro.Memoria.nodeValue.toLowerCase(); o como lo coloque mas arriba, como veras, solo son una serie de validaciones, espero te sirva de algo. Suerte.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 06 Jul 2009 05:34 pm
Necesito un cable urgente... el tema es qe tengo una aplicación con los datos de todos los artículos(los leo de un XML) en un datagrid, y los mismos datos en un ScrollPane (en este le aplico un formato más vistoso, con su foto,... s decir es otra vista del catálogo más visual), el tema es que al aplicar el filterFunc, me filtra los datos del datagrid, ¿Cómo hago para aplicarselo al SscrollPane? Y ya puesto, si alguien implentó el LIKE en el filterFunc, por favor que lo publique.

Gracias de antemano.

Por Silviayo

3 de clabLevel



 

msie7

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.