Comunidad de diseño web y desarrollo en internet online

datagrid solo carga la primera vez

Citar            
MensajeEscrito el 15 Nov 2008 08:11 pm
Hola,

Mi web consta de dos secciones y un menu con dos botones, una es el datagrid que se carga externamente y otra es una presentación que tambien se carga esternamente.

El datagrid carga los datos a mostrar de una base de datos mysql via php. En este datagrid muestro una sola columna y cuando pulso sobre esta me muestra el resto de datos en unos campos dinámicos situados a la derecha del datagrid. Resulta que cuando cargo por primera vez la sección del datagrid funciona bien, pero si cambio de sección y vuelvo de nuevo a la sección dl datagrid ya no me carga los datos, es decir, sólo funciona bien cuando lo cargo por primera vez. Alguna solución? Gracias

He probado a cerrar la base de datos :

Código :

mysql_close($link);


pero tampoco funciona. La web la tengo alojada en local y la versión de php es 4.3.1 y de mysql 4.0.12

Este es el código que utilizo :

- mostraragenda.php es el fichero que carga los datos de la base de datos a Flash :

Código :

<?php
    
    $link = mysql_connect ("localhost", "root", "");
    mysql_select_db("site");
    $result = mysql_query ("SELECT * FROM agenda") or die ("Invalid query");
    
    echo 
    "<datos>";

    while($row = mysql_fetch_array($result)) {
        echo 
    "<pelicula>
        <id>" . $row["id"] . "</id>
        <cab>" . strtoupper($row["cabecera"] ). "</cab>
        <tex>" . $row["texto"] . "</tex>
        <fec>" . $row["fecha"] . "</fec>
        <fot>" . $row["foto"]. "</fot>

    </pelicula>";
    }
    
    echo "</datos>";
mysql_free_result($result);
    

?>
</documento>


- el código de dentro del flash :

Código :

System.useCodepage = true;

import mx.controls.gridclasses.DataGridColumn;
import mx.styles.CSSStyleDeclaration;

//ESTIL0 DE LA CABRCERA DEL GRID
// Style for DataGrid
var styleObj:CSSStyleDeclaration= new mx.styles.CSSStyleDeclaration();
styleObj.styleName = "myStyle";
styleObj.fontFamily = "Verdana";
styleObj.fontSize = 9;
styleObj.fontWeight = "bold";
styleObj.color = 0x333333;
_global.styles["myStyle"] = styleObj;

pelis_grid.setStyle("styleName", "myStyle");
pelis_grid.setStyle("alternatingRowColors", Array(0xEAEFF4, 0xF8FAFB));
pelis_grid.setRowHeight(30);

pelis_grid.setStyle("hGridLines", true);
pelis_grid.setStyle("hGridLineColor", 0xC1D1E0);
pelis_grid.setStyle("vGridLines", true);
pelis_grid.setStyle("vGridLineColor", 0xC1D1E0);

pelis_grid.setStyle("borderStyle", "inset");
// top
pelis_grid.setStyle("buttonColor", 0xFFFFFF);
pelis_grid.setStyle("highlightColor", 0xFFFFFF);
// right and left
pelis_grid.setStyle("borderCapColor", 0xFFFFFF);
pelis_grid.setStyle("shadowCapColor", 0xFFFFFF);
// bottom
pelis_grid.setStyle("shadowColor", 0x336699);
pelis_grid.setStyle("borderColor", 0xFFFFFF);


//datagrid.resizableColumns = false;
//datagrid.setVScrollPolicy("off");

// themeColor
pelis_grid.setStyle("themeColor", 0xADC1D6); 
pelis_grid.setStyle("useRollOver", true);
pelis_grid.setStyle("textSelectedColor", 0x333333);

// rollOver on Header
pelis_grid.setStyle("rollOverColor", 0xD7FFD7);
   
// Header
//datagrid.setShowHeaders(false);

// Header style
var styleHeader:CSSStyleDeclaration= new mx.styles.CSSStyleDeclaration();
styleHeader.styleName = "myStyleHeader";
styleHeader.fontFamily = "Verdana";
styleHeader.fontSize = 10;
styleHeader.fontWeight = "bold";
styleHeader.color = 0x336699;
_global.styles["myStyleHeader"] = styleHeader;

pelis_grid.setStyle("headerStyle", styleHeader);
pelis_grid.setHeaderHeight(30);
pelis_grid.setStyle("headerColor", 0xFFFFFF);
// Mettre la fleche de tri en bleu
var headerListener = new Object();
headerListener.headerRelease = function(eventObj) {
   var target = eventObj.target;
   var owner  = target.owner;
   var dg = owner.pelis_grid;
   var colorArrow = new Color(dg.sortArrow);
   colorArrow.setRGB(0x336699); 
}
pelis_grid.addEventListener("headerRelease", headerListener);
pelis_grid.owner = this;
// --------------------



      pelis_grid.setHeaderHeight(30);
       pelis_grid.rowHeight = 60;
      pelis_grid.headerHeight = 30;
      
      



//Declaramos variables
enviar_lv = new LoadVars();
recibir_lv = new LoadVars();
var ordenarHacia:String = new String("asc");
var ordenarPor:String = new String();
var miXML:XML = new XML();
var pelisGrid:Array = new Array();
var alOrdenar:Object = new Object();
var alClicar:Object = new Object();
var alSeleccionar:Object = new Object();
var selec_str:String = new String();





/***************************** EMPEZAMOS *********************************/

//Cargamos el XML
miXML.ignoreWhite = true;
miXML.onLoad = function(success){
   //Cargamos y llenamos el array
   if (success){
      for (i=0; i<miXML.firstChild.firstChild.childNodes.length; i++){
         pelisGrid.addItem({ID: miXML.firstChild.firstChild.childNodes[i].childNodes[0].firstChild,
                           
                           Cabecera: miXML.firstChild.firstChild.childNodes[i].childNodes[1].firstChild,
                           
                           Texto: miXML.firstChild.firstChild.childNodes[i].childNodes[2].firstChild,
                           Fecha: miXML.firstChild.firstChild.childNodes[i].childNodes[3].firstChild,
                           Foto: miXML.firstChild.firstChild.childNodes[i].childNodes[4].firstChild});
                           
                           
      }
      
      
      //Asignamos al DataSet y al DataGrid
      datos.items = pelisGrid;
      datos.filtered = false;
      pelis_grid.dataProvider = datos.dataProvider;
      
      //Propiedades del DataGrid

   pelis_grid.removeColumnAt(pelis_grid.getColumnIndex("ID"));
   pelis_grid.removeColumnAt(pelis_grid.getColumnIndex("Texto"));
   pelis_grid.removeColumnAt(pelis_grid.getColumnIndex("Fecha"));
   pelis_grid.removeColumnAt(pelis_grid.getColumnIndex("Foto"));

   
      //Deshabilitamos ordenación de las columnas, pero no las columnas
      for (i=0; i<3; i++){
         pelis_grid.getColumnAt(i).sortOnHeaderRelease = false;
      }
   }
}
miXML.load("mostraractualidad.php");





/**************************** EVENTOS *******************************/
recibir_lv.onLoad = function(){
   //Vaciamos todo y recargamos el DataGrid con los datos modificados
   pelisGrid.splice(0, pelisGrid.length);
   datos.clear();
   datos.filtered = false;
   pelis_grid.dataProvider = datos.dataProvider;
   
   _root.miXML.load("mostraractividad.php");
}

// ORDENAMOS
alOrdenar.headerRelease = function(objeto){
   //Recogemos la ordenación actual
   miOrdenacion = datos.getIterator();
   //Cogemos el nombre de la columna
   ordenarPor = objeto.target.getColumnAt(objeto.columnIndex).columnName;
   
   if (ordenarHacia == "asc"){
      miOrdenacion.sortOn([ordenarPor], 1);
      ordenarHacia = "des";
   }
   else if (ordenarHacia == "des"){
      miOrdenacion.sortOn([ordenarPor], 2);
      ordenarHacia = "asc";
   }
   //Aplicamos el nuevo orden
   datos.setIterator(miOrdenacion);
}
pelis_grid.addEventListener("headerRelease", alOrdenar);

// FILTRAMOS
alClicar.click = function(objeto){
   if (objeto.target == filtrar_btn){
      //Si no hay filtro lo ponemos y cambiamos el texto en el botón
      if (datos.filtered == false){
         datos.filtered = true;
         datos.filterFunc();
         filtrar_btn.label = "Quitar Filtro";
      }
      //Si hay filtro lo quitamos y cambiamos el texto en el botón
      else if (datos.filtered == true){
         datos.filtered = false;
         filtrar_btn.label = "Filtrar";
      }
      
      //Función filterFunc de Flash
      datos.filterFunc = function(registro:Object) {
         var res_boo:Boolean = new Boolean(false);
         var act_str:String = new String(registro.Cabecera);
         var act_array:Array = new Array();
         
         //Rompemos el string por palabras y lo metemos en un array
         act_array = act_str.split(" ");
         
         for (i=0; i<act_array.length; i++){
            var t1_str:String = new String(act_array[i]);
            var t2_str:String = new String(filtrar_txt.text);
            if (t1_str.toUpperCase() == t2_str.toUpperCase()){
               res_boo = true;
            }
         }
         
         return(res_boo == true);
      }
   }
   
}
filtrar_btn.addEventListener("click", alClicar);


alSeleccionar.change = function(objeto){
   if (objeto.target == pelis_grid){
      selec_str = objeto.target.getItemAt(objeto.target.selectedIndex).Pelicula;
      
      id_txt.text = objeto.target.getItemAt(objeto.target.selectedIndex).ID;
      cabecera_txt.text = objeto.target.getItemAt(objeto.target.selectedIndex).Cabecera;
      texto_txt.text = objeto.target.getItemAt(objeto.target.selectedIndex).Texto;
      fecha_txt.text = objeto.target.getItemAt(objeto.target.selectedIndex).Fecha;
      foto_txt.text = objeto.target.getItemAt(objeto.target.selectedIndex).Foto;

   }
}
pelis_grid.addEventListener("change", alSeleccionar);

Por putoquintana

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Nov 2008 05:10 pm
@putoquintana no he leído todo el código porque es extensamente largo, pero antes de leerlo quisiera saber como haces para cambiar de sección, qué método utilizas.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 16 Nov 2008 06:17 pm
Hola,

utilizo un botón que carga un frame en el que tengo insertado el siguiente código con preloader :

Código :

function precarga(cual, donde) {
   donde.createEmptyMovieClip("src",1);
   donde._x = 200;
    donde._y = 100;
    donde.src._x = -200;
    donde.src._y = -105;
   donde.src.loadMovie(cual);
   donde.lineStyle(5, colorBack, 100);
   donde.moveTo(0, 10);
   donde.lineTo(250, 10);
   donde.createTextField("porcentaje", 2, 5, 20, 1, 1);
   donde.porcentaje.autoSize = true;
   donde.porcentaje.selectable = false;
   donde.onEnterFrame = function(Void) {
      var cargado = this.src.getBytesLoaded();
      var total = this.src.getBytesTotal();
      if (cargado == total && total>50) {
         this.clear();
         delete this.onEnterFrame;
         this.porcentaje.removeTextField();
      } else {
         var porcent = Math.round((cargado*100)/total);
         this.porcentaje.text = porcent+" %";
         this.lineStyle(5, 0xFFFFFF, 100);
         this.moveTo(0, 10);
         this.lineTo((2.5*porcent), 10);
      }
   };
}
this.createEmptyMovieClip("pba",1);
precarga("datagrid.swf", pba);


Repecto a lo que he comentado arriba, es decir, refrescar el datagrid y que cargue los datos sabes alguna solución?
Saludos

Por putoquintana

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Nov 2008 10:13 am
Disculpa la tardanza en responder.
Mira lo que estás realizando es que cada vez que llegas a ese frame entonces vuelves a cargar el SWF del datagrid y lo más seguro es que en este SWF tengas el código de leer de la base de datos, por lo tanto te recomiendo dos opciones:
O descargas el SWF del datagrid y todas las variables que utilizas cada vez que cambies de módulo o solo cargas el datagrid una sola vez y las demás veces solo lo muestras (es la variante que más me gusta), algo así como esto:

Código ActionScript :

//---Esta parte se cargará sólo la primera vez que llegues a este frame
if(cargado == undefined){

    var cargado:Boolean = true;

    //---Aqui pones el código de cargar el datagrid

//---Esta parte se cargará todas las demás veces que llegues a este frame
}else{

    pba._visible = true;

}


Sólo debes tener en cuenta una cosa, que cada vez que cambies a otro módulo debes hacer invisible el movieClip que contiene al datagrid (pba) por lo tanto debes poner su propiedad de _visible en false.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox

 

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