Comunidad de diseño web y desarrollo en internet online

Interactuar con DataGrid

Citar            
MensajeEscrito el 07 Ene 2010 01:37 pm
Hola tengo un problema al interactuar con el DataGrid, no consigo que al seleccionar un celda se muestran mas datos correcpondientes a esa celda, proporciono el codigo para ver si me pueden ayudar

Código ActionScript :

//---- Cargamos el XML
miXML = new XML();
miXML.ignoreWhite = true;
miXML.onLoad = function(success) {
   if (success) {
//---- Creamos los arrays donde iran los datos
      Longitud   = miXML.firstChild.childNodes.length;
      Yinfo   = new Array(Longitud);
      YCosto  = new Array(Longitud);
      YDato   = new Array(Longitud);
      YImg    = new Array(Longitud);
      Yindice = new Array(Longitud);
//---- Llenar los arrays
      for (i=0; i<Longitud; i++) {
         Yinfo[i]  = miXML.firstChild.childNodes[i].attributes.XInfo;
         YCosto[i] = miXML.firstChild.childNodes[i].attributes.XCosto;
         YDato[i]  = miXML.firstChild.childNodes[i].attributes.XDatos;
         YImg[i]   = miXML.firstChild.childNodes[i].attributes.XFoto;
         Yindice[i] = i;
      }
      llenarDataGrid();
   } else {
      trace("No se pudo cargar el XML");
   }
};
//---- Carga XML
miXML.load("Prod1.xml");
//---- Funcion para llenarDataGrid
function llenarDataGrid() {
   miDataGrid.embedFonts = true;
    miDataGrid.setStyle("fontFamily", "ArialBMP");
    miDataGrid.setStyle("fontSize", 10);
   miDataGrid.editable = false;
   miDataGrid.headerHeight = 16;
   miDataGrid.resizableColumns = false;
   miDataGrid.selectable = true;
   miDataGrid.showHeaders = true;
   miDataGrid.sortableColumns = false;
//---- Le asignamos un proveedor de datos
   losDatos = new Array();
   miDataGrid.dataProvider = losDatos;
   //Metemos los datos en el ComboBox
   for (i=0; i<Yinfo.length; i++) {
      losDatos.addItem({Indice:Yindice[i], Modelo:Yinfo[i], Costo:YCosto[i], Info:YDato[i], Foto:YImg[i]});
   }
//---- Propiedades de las columnas
   miDataGrid.getColumnAt(0).width = 50;  // Indice 
   miDataGrid.getColumnAt(1).width = 150; // Modelo
   miDataGrid.getColumnAt(2).width = 80;  // Costo
   miDataGrid.getColumnAt(3).width = 80;  // Archivo
   miDataGrid.getColumnAt(4).width = 80;  // Imagen
}
//---- Acciones Al seleccionar un Celda [Aqui el Problema]
var XSeleccion:Object = new Object();
XSeleccion.change = function(objeto){
   if (objeto.target == miDataGrid){
      miTextArea.text = objeto.target.getItemAt(objeto.target.selectedIndex).XDatos;
                // miTextArea es un componete TextArea
      mcXFoto.loadMovie(XFoto);
                // mxXfoto es un mc el cual contendra la foto
   }
}
//---- Listener de miDataGrid
miDataGrid.addEventListener("change", XSeleccion);
//----
stop();

//--------------------
Este es mi XML:

Código XML :

<Modelos>
   <XModelo XInfo='Modelo 1' XCosto='$10.10' XDatos='info1.txt'  XFoto='Foto1.png' />
   <XModelo XInfo='Modelo 2' XCosto='$10.20' XDatos='info2.txt'  XFoto='Foto2.png' />
   <XModelo XInfo='Modelo 3' XCosto='$10.30' XDatos='info3.txt'  XFoto='Foto3.png' />
   <XModelo XInfo='Modelo 4' XCosto='$10.40' XDatos='info4.txt'  XFoto='Foto4.png' />
   <XModelo XInfo='Modelo 5' XCosto='$10.50' XDatos='info5.txt'  XFoto='Foto5.png' />
   <XModelo XInfo='Modelo 6' XCosto='$10.60' XDatos='info6.txt'  XFoto='Foto6.png' />
   <XModelo XInfo='Modelo 7' XCosto='$10.70' XDatos='info7.txt'  XFoto='Foto7.png' />
   <XModelo XInfo='Modelo 8' XCosto='$10.80' XDatos='info8.txt'  XFoto='Foto8.png' />
   <XModelo XInfo='Modelo 9' XCosto='$10.90' XDatos='info9.txt'  XFoto='Foto9.png' />
   <XModelo XInfo='Modelo 10' XCosto='$10.10' XDatos='info10.txt'  XFoto='Foto10.png' />
   <XModelo XInfo='Modelo 11' XCosto='$10.20' XDatos='info11.txt'  XFoto='Foto11.png' />
   <XModelo XInfo='Modelo 12' XCosto='$10.30' XDatos='info12.txt'  XFoto='Foto12.png' />
   <XModelo XInfo='Modelo 13' XCosto='$10.40' XDatos='info13.txt'  XFoto='Foto13.png' />
   <XModelo XInfo='Modelo 14' XCosto='$10.50' XDatos='info14.txt'  XFoto='Foto14.png' />
   <XModelo XInfo='Modelo 15' XCosto='$10.60' XDatos='info15.txt'  XFoto='Foto15.png' />
   <XModelo XInfo='Modelo 16' XCosto='$10.70' XDatos='info16.txt'  XFoto='Foto16.png' />
   <XModelo XInfo='Modelo 17' XCosto='$10.80' XDatos='info17.txt'  XFoto='Foto17.png' />
   <XModelo XInfo='Modelo 18' XCosto='$10.90' XDatos='info18.txt'  XFoto='Foto18.png' />
   <XModelo XInfo='Modelo 19' XCosto='$10.10' XDatos='info19.txt'  XFoto='Foto19.png' />
   <XModelo XInfo='Modelo 20' XCosto='$10.20' XDatos='info20.txt'  XFoto='Foto20.png' />
   <XModelo XInfo='Modelo 21' XCosto='$10.30' XDatos='info21.txt'  XFoto='Foto21.png' />
   <XModelo XInfo='Modelo 22' XCosto='$10.40' XDatos='info22.txt'  XFoto='Foto22.png' />
   <XModelo XInfo='Modelo 23' XCosto='$10.50' XDatos='info23.txt'  XFoto='Foto23.png' />
   <XModelo XInfo='Modelo 24' XCosto='$10.60' XDatos='info24.txt'  XFoto='Foto24.png' />
   <XModelo XInfo='Modelo 25' XCosto='$10.70' XDatos='info25.txt'  XFoto='Foto25.png' />
   <XModelo XInfo='Modelo 26' XCosto='$10.80' XDatos='info26.txt'  XFoto='Foto26.png' />   
</Modelos>


La Carga del XML funciona bien menos la accion de mostrar el Archivo y la foto, si necesitan los Archivos los mando con gusto

Por Hunteryx

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Ene 2010 03:42 pm
Esta es la data que tiene tu datagrid:

{Indice:Yindice[i], Modelo:Yinfo[i], Costo:YCosto[i], Info:YDato[i], Foto:YImg[i]}

Pero buscas una propiedad que allí no existe:

objeto.target.getItemAt(objeto.target.selectedIndex).XDatos;

Deberías crear una estructura de datos paralela a la del datagrid que contenga la info adicional (la que no se muestra en el datagrid) para que puedas encontrarla por índice, es decir el indice del datagrid coincide con el indice del array de los datos extra

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 07 Ene 2010 03:56 pm
Hola Solisarg:

En efecto, y concuerdo contigo, sinembargo esta sería una posibilidad (abajo), pero al ponerla mi TextArea no reconoce la informacion, es decir es "undefined" y mucho menos el mc que contendra al imagen, alguna idea de porque pasa esto...?

Código ActionScript :


miTextArea.text = objeto.target.getItemAt(objeto.target.selectedIndex).YDato[i];
mcXFoto.loadMovie(YImg[i]); 



Un saludo

Por Hunteryx

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Ene 2010 04:22 pm
La causa es que la fila del datagrid no contiene la información que le pides ... quizás no entendiste mi anterior explicación

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 07 Ene 2010 05:00 pm
Hola:

Pues creo que asi es, no entendi y una disculpa por ello, asi ke me puedes dar alguna idea de como hacerlo

Un Saludo

Por Hunteryx

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Ene 2010 05:31 pm
Deberías crear una estructura de datos paralela a la del datagrid que contenga la info adicional (la que no se muestra en el datagrid) para que puedas encontrarla por índice, es decir el indice del datagrid coincide con el indice del array de los datos extra


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 07 Ene 2010 07:17 pm
Hola

He resuelto el problema y pongo a dispocición el codigo completo para quien este interesado:

Código ActionScript :

//---- Cargamos el XML
miXML = new XML();
miXML.ignoreWhite = true;
miXML.onLoad = function(success) {
   if (success) {
//---- Creamos los arrays donde iran los datos
      Longitud   = miXML.firstChild.childNodes.length;
      Yinfo   = new Array(Longitud);
      YCosto  = new Array(Longitud);
      YDato   = new Array(Longitud);
      YImg    = new Array(Longitud);
      Yindice = new Array(Longitud);
//---- Llenar los arrays
      for (i=0; i<Longitud; i++) {
         Yinfo[i]  = miXML.firstChild.childNodes[i].attributes.XInfo;
         YCosto[i] = miXML.firstChild.childNodes[i].attributes.XCosto;
         YDato[i]  = miXML.firstChild.childNodes[i].attributes.XDatos;
         YImg[i]   = miXML.firstChild.childNodes[i].attributes.XFoto;
         Yindice[i] = i;
      }
      llenarDataGrid();
   } else {
      trace("No se pudo cargar el XML");
   }
};
//---- Carga XML
miXML.load("Prod1.xml");
//---- Funcion para llenarDataGrid
function llenarDataGrid() {
   miDataGrid.embedFonts = true;
    miDataGrid.setStyle("fontFamily", "ArialBMP");
    miDataGrid.setStyle("fontSize", 10);
   miDataGrid.editable = false;
   miDataGrid.headerHeight = 16;
   miDataGrid.resizableColumns = false;
   miDataGrid.selectable = true;
   miDataGrid.showHeaders = true;
   miDataGrid.sortableColumns = false;
//---- Le asignamos un proveedor de datos
   losDatos = new Array();
   miDataGrid.dataProvider = losDatos;
   //Metemos los datos en el ComboBox
   for (i=0; i<Yinfo.length; i++) {
      losDatos.addItem({Indice:Yindice[i], Modelo:Yinfo[i], Costo:YCosto[i], Info:YDato[i], Foto:YImg[i]});
   }
//---- Propiedades de las columnas
   miDataGrid.getColumnAt(0).width = 50;  // Indice 
   miDataGrid.getColumnAt(1).width = 150; // Modelo
   miDataGrid.getColumnAt(2).width = 80;  // Costo
   miDataGrid.getColumnAt(3).width = 80;  // Archivo
   miDataGrid.getColumnAt(4).width = 80;  // Imagen
}
//---- Acciones Al seleccionar un Celda [Aqui el Problema]
function XSeleccion() {
   miTextArea.text =  miDataGrid.selectedItem.Info;
   mcXFoto.loadMovie(miDataGrid.selectedItem.Foto);
}
miDataGrid.addEventListener("change", XSeleccion);
//----
stop();


Un saludo a todos

Por Hunteryx

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Ene 2010 11:20 pm
Está bien, aunque con un solo Array con objetos sería suficiente

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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