Ver Mensaje Individual
  #4 (permalink)  
Antiguo 12/01/2006, 05:45
night.noise
 
Fecha de Ingreso: octubre-2003
Mensajes: 7
Antigüedad: 21 años, 1 mes
Puntos: 0
Datagrid y comportamiento anómalo

Bueno, pues como después de las pruebas no consigo nada he preparado un pequeño ejemplo de lo que he descrito al comienzo del Tema.

Aparte de crear un archivo 'EleCntDat.as' con el código incluido en el primer mensaje del Tema, hay que crear un proyecto Flash que simplemente contega un Datagrid con el nombre de Instancia 'myDataGrid' de unos 450 x 257 (ancho x alto) con un único fotograma.

En el código del primer fotograma incluir el siguiente código:

/**** Inicio del código ****/
function cDato(){
this.DatLinea = new Array();
}
function cDatLinea(fld01,fld02,fld03,fld04,fld05,fld06,fld0 7,fld08,fld09){
this.Fld01=fld01;
this.Fld02=fld02;
this.Fld03=fld03;
this.Fld04=fld04;
this.Fld05=fld05;
this.Fld06=fld06;
this.Fld07=fld07;
this.Fld08=fld08;
this.Fld09=fld09;
}
var Datos = new cDato();
Datos.DatLinea[0] = new cDatLinea("Texto 1","Azul",1,1,"Prm Texto 1","Negro",2,0,"");
Datos.DatLinea[1] = new cDatLinea("Texto 2","Negro",1,0,"","Rojo",2,1,"Cns Texto 2");
Datos.DatLinea[2] = new cDatLinea("Texto 3","Azul",1,1,"Prm Texto 3","Negro",2,0,"");
Datos.DatLinea[3] = new cDatLinea("Texto 4","Azul",1,1,"Prm Texto 4","Negro",2,0,"");
Datos.DatLinea[4] = new cDatLinea("Texto 5","Negro",1,0,"","Rojo",2,1,"Cns Texto 5");
Datos.DatLinea[5] = new cDatLinea("Texto 6","Azul",1,1,"Prm Texto 6","Negro",2,0,"");
Datos.DatLinea[6] = new cDatLinea("Texto 7","Azul",1,1,"Prm Texto 7","Negro",2,0,"");
Datos.DatLinea[7] = new cDatLinea("Texto 8","Azul",1,1,"Prm Texto 8","Negro",2,0,"");
Datos.DatLinea[8] = new cDatLinea("Texto 9","Negro",1,0,"","Rojo",2,1,"Cns Texto 9");
Datos.DatLinea[9] = new cDatLinea("Texto 10","Negro",1,0,"","Rojo",2,1,"Cns Texto 10");
Datos.DatLinea[10] = new cDatLinea("Texto 11","Azul",1,1,"Prm Texto 11","Negro",2,0,"");
Datos.DatLinea[11] = new cDatLinea("Texto 12","Azul",1,1,"Prm Texto 12","Negro",2,0,"");
Datos.DatLinea[12] = new cDatLinea("Texto 13","Azul",1,1,"Prm Texto 1","Negro",2,0,"");
Datos.DatLinea[13] = new cDatLinea("Texto 14","Negro",1,0,"","Rojo",2,1,"Cns Texto 2");
Datos.DatLinea[14] = new cDatLinea("Texto 15","Azul",1,1,"Prm Texto 3","Negro",2,0,"");
Datos.DatLinea[15] = new cDatLinea("Texto 16","Azul",1,1,"Prm Texto 4","Negro",2,0,"");
Datos.DatLinea[16] = new cDatLinea("Texto 17","Negro",1,0,"","Rojo",2,1,"Cns Texto 5");
Datos.DatLinea[17] = new cDatLinea("Texto 18","Azul",1,1,"Prm Texto 6","Negro",2,0,"");
Datos.DatLinea[18] = new cDatLinea("Texto 19","Azul",1,1,"Prm Texto 7","Negro",2,0,"");
Datos.DatLinea[19] = new cDatLinea("Texto 20","Azul",1,1,"Prm Texto 8","Negro",2,0,"");
Datos.DatLinea[20] = new cDatLinea("Texto 21","Negro",1,0,"","Rojo",2,1,"Cns Texto 9");
Datos.DatLinea[21] = new cDatLinea("Texto 22","Negro",1,0,"","Rojo",2,1,"Cns Texto 10");
Datos.DatLinea[22] = new cDatLinea("Texto 23","Azul",1,1,"Prm Texto 11","Negro",2,0,"");
Datos.DatLinea[23] = new cDatLinea("Texto 24","Azul",1,1,"Prm Texto 12","Negro",2,0,"");
function load(){
myDataGrid.dataProvider.removeAll();

for(var i=0;i<Datos.DatLinea.length;i++){
linea_add(Datos.DatLinea[i].Fld01,
Datos.DatLinea[i].Fld02,
Datos.DatLinea[i].Fld03+"%",
Datos.DatLinea[i].Fld04,
Datos.DatLinea[i].Fld05,
Datos.DatLinea[i].Fld06,
Datos.DatLinea[i].Fld07+"%",
Datos.DatLinea[i].Fld08,
Datos.DatLinea[i].Fld09,
i);
}
function linea_add(descrip,datprmtor,prcprmtor,edtprmtor,hl pprmtor,datcnstor,prccnstor,edtcnstor,hlpcnstor,id xfile){
myDataGrid.dataProvider.addItem
(
{C01: descrip,
H0p: hlpprmtor,
D0p: datprmtor,
P0p: prcprmtor,
E0p: edtprmtor,
H0s: hlpcnstor,
D0s: datcnstor,
P0s: prccnstor,
E0s: edtcnstor,
IdxFil: idxfile}
);
}
}
dsgn();
load();
myDataGrid.rowCount=13;

function delc(){
myDataGrid.removeAllColumns();
}
function dsgn(){
import mx.controls.gridclasses.DataGridColumn;

myDataGrid.setSize(450,310);
myDataGrid.editable=true;
myDataGrid.resizableColumns=false;

myDataGrid.removeAllColumns();

var column = new DataGridColumn("C01");
column.headerText = "Descripción";
column.width = 210;
column.resizable = false;
column.textAlign = "left";
column.editable = false;
column.sortable = false;
myDataGrid.addColumn(column);

var column = new DataGridColumn("H0p");
column.headerText = "";
column.width = 0;
column.resizable = false;
column.textAlign = "left";
column.editable = false;
column.sortable = false;
myDataGrid.addColumn(column);

var column = new DataGridColumn("D0p");
column.headerText = "Cab. x";
column.width = 70;
column.resizable = false;
column.textAlign = "right";
column.editable = false;
column.sortable = false;
column.cellRenderer="EleCntDat"
myDataGrid.addColumn(column);

var column = new DataGridColumn("P0p");
column.headerText = "xx";
column.width = 40;
column.textAlign = "right";
column.editable = false;
column.sortable = false;
myDataGrid.addColumn(column);

var column = new DataGridColumn("E0p");
column.headerText = "";
column.width = 0;
column.resizable = false;
column.textAlign = "left";
column.editable = false;
column.sortable = false;
myDataGrid.addColumn(column);

var column = new DataGridColumn("H0s");
column.headerText = "";
column.width = 0;
column.resizable = false;
column.textAlign = "left";
column.setStyle("borderStyle","none");
column.editable = false;
column.sortable = false;
myDataGrid.addColumn(column);

var column = new DataGridColumn("D0s");
column.headerText = "Cab. y";
column.width = 70;
column.resizable = false;
column.textAlign = "right";
column.editable = false;
column.sortable = false;
column.cellRenderer="EleCntDat";
myDataGrid.addColumn(column);

var column = new DataGridColumn("P0s");
column.headerText = "yy";
column.width = 40;
column.resizable = false;
column.textAlign = "right";
column.editable = false;
column.sortable = false;
myDataGrid.addColumn(column);

var column = new DataGridColumn("E0s");
column.headerText = "";
column.width = 0;
column.resizable = false;
column.textAlign = "left";
column.editable = false;
column.sortable = false;
myDataGrid.addColumn(column);

DGLstPress = new Object();
DGLstPress.cellPress = function(event){
idxCol=event.columnIndex;
idxRow=event.itemIndex;

lblPress.text="cellPress (" + idxCol + "," + idxRow + ")";

if(idxCol==2){
trace ("Valor E0p: "+Datos.DatLinea[idxRow].Fld04);
if(Datos.DatLinea[idxRow].Fld04==1)
myDataGrid.getColumnAt(idxCol).editable = true;
else myDataGrid.getColumnAt(idxCol).editable = false;
}else myDataGrid.getColumnAt(idxCol).editable = false;
}
myDataGrid.addEventListener("cellPress", DGLstPress);

DGLstFcOut = new Object();
DGLstFcOut.cellFocusOut = function(event){
myDataGrid.getColumnAt(idxCol).editable = false;
}
myDataGrid.addEventListener("cellFocusOut", DGLstFcOut);

DGLstFcIn = new Object();
DGLstFcIn.cellFocusIn = function(event){
idxCol=event.columnIndex;
idxRow=event.itemIndex;

if(Datos.DatLinea[idxRow].Fld04==1)
myDataGrid.getColumnAt(idxCol).editable = true;
else{
myDataGrid.getColumnAt(idxCol).editable = false;
myDataGrid.focusedCell = {columnIndex:idxCol, itemIndex:selfocus_bsc(idxRow)};
}
}
myDataGrid.addEventListener("cellFocusIn", DGLstFcIn);

DGLstEdt = new Object();
DGLstEdt.cellEdit = function(event){
lblFcOut.text="cellEdit (" + idxCol + "," + idxRow + ")";
Datos.DatLinea[idxRow].DatPrmtor=event.target.__dataProvider[idxRow].Datos;
load();
}
myDataGrid.addEventListener("cellEdit", DGLstEdt);
}
var idxCol:Number=-1;
var idxRow:Number=-1;

function selfocus_bsc(index){
var iAux=0;


for(var i=index;i<Datos.DatLinea.length;i++){
if(Datos.DatLinea[i].Fld05==1){
iAux=i;
break;
}
}
return i;
}
/**** Fin del código ****/

Por último incluir el archivo .AS en el proyecto que se haya creado.

Si todo va bien, tras ejecutar, se podrá ver que se llena el Datagrid con 5 columnas visibles y 22 filas. La segunda columna tendra, para cada fila, los texto Azul y Negro, que equivalen a la ejecución del CellRender. El color depende de una columna oculta 'E0p' con valores 1 ó 0 (1 dará Azul y 0 dará Negro). Lo mismo ocurre con la columna 4 y el color rojo y negro, dependiendo de la columna 'E0s'.

A primera vista todo parecerá haber funcionado bien. Pero por debajo del rowCount (la zona de filas no visible inicialmente), el resultado de la aplicación de color no es correcto.

Este es mi problema. Cualquier ayuda será útil.

Un saludo