Comunidad de diseño web y desarrollo en internet online

datagrid con checkbox

Citar            
MensajeEscrito el 29 Ago 2006 09:42 am
Hola de nuevo amigos,

Tengo un datagrid que se rellena mediante datos de mi BD. La cuestión es que necesito añadirle una nueva columna en la que haya un checkbox y ésto se debe generar dinámicamente al cargar el datagrid. He buscado por todos los sitios ya que hay gente con la misma duda pero no consigo encontrar nada.

Había intentado generar el checkbox con el método attachMovie de la siguiente forma, pero no sé si es correcto:

Código :

dividido=cadena.split(",");
   
for (i=0;i<=cantidad;i=i+5)
{
   objeto = {Centro: dividido[i],Fecha: dividido[i+1],Hora: dividido[i+2],Puesto: dividido[i+3],Usuario: dividido[i+4], Presente: attachMovie("CheckBox", "chb", 0)};     

   dgreservas.addItem(objeto);       
}

El datagrid se carga bien pero el checkbox no consigo sacarlo. Alguien me puede ayudar para insertar los checkbox en el datagrid??. He añadido el componente checkbox a la biblioteca.

Una vez consiga esto, tengo que recorrer los checkbox del datagrid para saber cuáles están seleccionados. Pero eso ya vendrá después; símplemente lo comento para aportar más información.

Gracias y saludos!!!

Por miguel867

5 de clabLevel



 

msie
Citar            
MensajeEscrito el 01 Sep 2006 10:03 am
Hola,

Investigando en interenet sobre cellrenderer encontré algún ejemplo de datagrid con una columna de checkbox´s. Para ello hace falta una clase en un fichero .as correspondiente al componente checkbox que se quiere poner en la columna del datagrid. El problema es que todos los ejemplos que he encontrado rellenan el datagrid de forma estática (es decir, sin coger datos de ninguna Base de Datos), pero mi caso es el contrario: lo tengo que rellenar de forma dinámica.

El primer problema que tengo es que en la columna (la última) donde deberían aparecer los checkbox´s, no aparecen.

El código que tengo es el siguiente:

Clase que tengo en el fichero EleCheckBox.as :

Código :

class EleCheckBox extends mx.core.UIComponent{
   
   var miCbox:MovieClip; //Contenedor del checkBox
   
   //Constructor
   function EleCheckBox(){
      
   }
   
   //Con createChildren creamos el contenido para la celda, en este caso un
   //checkBox creada con createObject.
   function createChildren():Void{
      //createObject nos permite crear un objeto dentro de otro.
      createObject("CheckBox", "miCbox", 1);
      miCbox._visible = false;
      miCbox.addEventListener("click", _root.alClicar);
      miCbox.size();
   }
   
   //Ponemos el tamaño adecuado
   function size():Void{
      miCbox._width = 100;
      miCbox._height = 22;
   }
   
   function setValue(suggested:String, item:Object, selected:Boolean):Void{
      //Si el objeto tiene datos, lo mostramos y ponemos el texto correspondiente
      if (item != undefined){
         miCbox.label = suggested;
         miCbox._visible = true;
         miCbox.size();
      }
   }
}


En otro fichero .fla tengo un fotograma en el que se debe clicar un botón para que realice una búsqueda en la BD a través de la información seleccionada en dos combobox ("nombrecentro" y "horario") y un calendario ("dia"). Con los datos recuperados de la consulta se rellena bien el datagrid (incluso sale la cabecera de la columna "Asistencia"->donde deben aparecer los checkbox), pero no se muestran los checkbox´s en la última columna.

Código en el fichero .fla, asociado al botón "buscar":

Código :

on (press)
{
   import mx.controls.Alert;
   Alert.buttonWidth = 100;
   
   dgreservas.removeAllColumns();
   dgreservas.visible=true;
      
   dgreservas.columnNames = ["Centro", "Fecha", "Hora", "Puesto", "Usuario", "DNI", "Asistencia"];
   
             dgreservas.getColumnAt(0).width=85;
   dgreservas.getColumnAt(1).width=75;
   dgreservas.getColumnAt(2).width=60;
   dgreservas.getColumnAt(3).width=60;
   dgreservas.getColumnAt(4).width=155;
   dgreservas.getColumnAt(5).width=75;
   dgreservas.getColumnAt(6).width=75;
      
   chbtodos=todos.selected; //checbox para seleccionar busqueda por todos los nombres
   nombrecentro=cmbnomcentro.text; //combobox para seleccionar un nombre
   dia=txtfecha.selectedDate; //calendario para seleccionar una fecha
   horario=cmbhora.text; //combobox para seleccionar una hora

   if ((nombrecentro=="Ninguno") && (chbtodos==false))
   {
      Alert.show("Debe seleccionar un centro o todos", "Atenció", Alert.OK);
   }

   misvar=new LoadVars();
   misvar.centro=nombrecentro;
   misvar.fecha=dia;
   misvar.hora=horario;
   misvar.todoscentros=chbtodos;
   
   misvar2=new LoadVars();
   misvar.sendAndLoad("http://www.miurl.com/dgreservas.php",misvar2,"_POST"); // se envían los datos seleccionados para realizar la consulta

   misvar2.onLoad=function()
   {
      cadena=this.latabla;
      cantidad=(this.cuantos)*6;
      dividido=cadena.split(",");
   
      for (i=0;i<=cantidad;i=i+6)
                   {
         objeto = {Centro: dividido[i],Fecha: dividido[i+1],Hora: dividido[i+2],Puesto: dividido[i+3],Usuario: dividido[i+4], DNI: dividido[i+5], Asistencia: "Falta"};     
                       dgreservas.addItem(objeto);       
                    }
      
   }

   var columna = dgreservas.getColumnAt(6);
   columna.cellRenderer = "EleCheckBox";
   
   
   //Listener para el evento click para las CheckBox
   var alClicar:Object = new Object();
   alClicar.click = function(objeto){
      trace(objeto.target.selected);
   }
   
   todos.selected=false;
   cmbnomcentro.removeAll();
   txtfecha.text=" ";
   cmbhora.removeAll();
   
}


A ver si alguien me puede ayudar, porque estoy un poco perdido y no sé qué puedo probar.

Gracias y saludos!!!

Por miguel867

5 de clabLevel



 

msie

 

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