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 PHP:
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 PHP:
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!!!