Comunidad de diseño web y desarrollo en internet online

Evento sobre celda en datagrid

Citar            
MensajeEscrito el 14 Abr 2009 05:10 pm
Hola a todos,
Quisiera saber si es posible capturar eventos sobre las celdas de un datagrid y de ser posible como hacerlo.
El cuento es que necesito realizar unas acciones dependiendo de a que celda se le de click en un datagrid, lo he hecho con filas pero no se como hacerlo con celdas;

Cualquier sugerencia sera bienvenida, muchas gracias

Por rgc

24 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Abr 2009 05:46 pm
Mírate el evento datagrid.cellPress, indica indice de fila y columna

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Abr 2009 09:43 pm
Saludos,
Jorge muchas gracias por tu ayuda.
Mira he buscado lo que me sugieres y encontre lo siguiente pero no funciona, no compila:

Código :

        var gridListener:Object = new Object();
       gridListener.cellPress = function(whatever_obj:Object) 
       {
           var cell_data:String = "("+whatever_obj.columnIndex+", "+whatever_obj.itemIndex+")";
            Alert.show("The cell at "+cell_data+" has been clicked");
      }
      
      dgCpuMemory.addEventListener("cellPress", gridListener);

y esta es mi grilla

Código :

<mx:DataGrid id="dgCpuMemory" dataProvider="{arCpuMemory}"  left="5" top="5" right="5"  bottom="5">
   <mx:columns>
       <mx:DataGridColumn headerText="Equipo" dataField="name"   wordWrap="false" width="120" />
       <mx:DataGridColumn headerText="Modelo" dataField="model" textAlign="left" width="70" />
       <mx:DataGridColumn headerText="Puertos" dataField="ports" textAlign="left"  width="125"/>
       <mx:DataGridColumn headerText="CPU" dataField="cpu" sortCompareFunction="numericSortCpu" textAlign="right" width="20"/>
       <mx:DataGridColumn headerText="Mem. Proc" dataField="processor" sortCompareFunction="numericSortProcessor" textAlign="right" width="20"/>
       <mx:DataGridColumn headerText="Mem. I/O" dataField="io" sortCompareFunction="numericSortIo" textAlign="right" width="20"/>
       <mx:DataGridColumn headerText="Actualizado" dataField="lastdate"  textAlign="left" width="70"/>
   </mx:columns>
</mx:DataGrid>

el error de compilacion sale sobre las lineas:
gridListener.cellPress = function(whatever_obj:Object)
"1120: Access of undefined property gridListener"
y
dgCpuMemory.addEventListener("cellPress", gridListener);
"1120: Access of undefined property gridListener"
"1120: Access of undefined property dgCpuMemory"

Pareciera que no reconoce la grid pero no entiendo por que.

Agradezco cualquier colaboracion

Att

Ricardo Gomez

Por rgc

24 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Abr 2009 12:14 am
Estás usando sintaxis de AS2, igual es culpa mía que pensé que cellPress seguía existiendo, pero ahora es itemClick, buscalo en los eventos de la clase datagrid

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Abr 2009 05:04 pm
Hola,

Nuevamente mis agradecimientos jorge por tu colaboracion y en efecto ya solucione ese problema, no obstante me surge una duda que tiene que ver con las celdas en datagrid: Se puede en una celda de un datagrid crear varios botones dinamicamente dependiendo de una consulta? Mira ya he averiguado y encontre esto: http://axelscript.com/wp-content/cfwtExamples/UsingTheItemRendererWithADataGrid/bin/UsingTheItemRendererWithADataGrid.html y el codigo es parecido a esto:

Código :

<mx:DataGridColumn headerText="" dataField="test_id" width="80">
            <mx:itemRenderer>
                <mx:Component>
                    <mx:HBox horizontalAlign="center">
                        <mx:Button label="Details" width="75" click="outerDocument.getDetails(data.test_id)"/>    
                    </mx:HBox>                                            
                </mx:Component>
            </mx:itemRenderer>
        </mx:DataGridColumn>

El problema es que los botones se deberian crear dinamicamente ya que, para cada fila en la celda especifica, puede tener uno o mas botones dependiendo del resultado que devuelva la BD.

Agradezco tu colaboracion

Att

Ricardo Gómez Cuervo

Por rgc

24 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Abr 2009 05:27 pm
Tienes que crear tu propio componente (en este caso basado en HBox) desde menú File->New->MXML Component
Luego internamente implementas la programación que necesites (recuerda que los datos que está mostrando están en el objeto data) y lo pones como itemRenderer

<mx:DataGridColumn headerText="" dataField="test_id" width="80" itemRenderer="miComponente">

Donde miComponente es la clase que asignaste a tu componente (lo tienes que importar)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Abr 2009 07:01 pm
jorge, de acuerdo, muy valiosa tu ayuda. una pregunta mas, yo he creado algunos componentes propios pero a ninguno de ellos le tenia que pasar parametros, a diferencia de este, pues como te mencionaba ese componente que me sugieres deberia crear un numero determinado de botones. Teniendo esto, comó le puedo decir al componente que ponga x cantidad de botones sabiendo que el numero de botones no es fijo?

Muchas gracias por tu valiosa colaboracion.

Att

Ricardo Gómez Cuervo

Por rgc

24 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Abr 2009 07:24 pm
Supongamos que el componente esta mostrando el field departamentos, accedes directamente al dato a través de:

this.data.departamentos

Es decir el datagrid copia la propiedad que sea al objeto data

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Abr 2009 09:11 pm
Saludos,
Jorge, hice lo que me sugeriste pero al intentar obtener el dato en mi componente de la forma:
this.data.departamentos
me arroja este error de compilacion:
1042: The this keyword can not be used in static methods. It can only be used in instance methods, function closures, and global code.
Este es mi componente: (Por el momento solo estoy intentando obtener el dato de ese campo)

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="50">
<mx:Script>
  <![CDATA[
   import mx.controls.Alert;
   Alert.show("Hola dato "+this.data.memory);
   ]]>
</mx:Script>
    <mx:Button label="Details" width="65" height="12" paddingBottom="1" paddingTop="1" paddingLeft="0" paddingRight="0" fontSize="9" />
</mx:HBox>


Hay algo mal en esto?

Att

Ricardo Gómez Cuervo

Por rgc

24 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Abr 2009 09:52 pm
Saludos,
Jorge disculpa el post anterior , fue un pequeño lapsus ....
Mira ya llevo mi componente de esta forma:

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="90" creationComplete="init()">
<mx:Script>
  <![CDATA[
     import mx.controls.Button;
   import mx.controls.Alert;
   public function init():void
   {
      for (var i:String in this.data.memory)
      {
         var b:Button = new Button();
         b.label = this.data.memory[i];//event.result[i].cantidad;
         b.setStyle("fontWeight" , "normal");
         b.setStyle("fontSize" , 9);
         b.height=18;
         this.addChild(b);
      }
   }
   ]]>
</mx:Script>
</mx:VBox>


Como te daras cuenta decidi utilizar el Vbox envez de Hbox ya que necesito que los botones esten apilados verticalmente. El problema ahora es que necesito que la fila del datagrid se auto ajuste en el alto al contenido que tenga la celda donde inserte los botones.

Agradezco tu valiosa colaboracion.

Por rgc

24 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Abr 2009 09:56 pm
El datagrid hasta donde se, se ajusta siempre al mismo alto, dudo que eso se cambie fácilmente ... yo los duplicaría en horizontal. De todas formas se que está el advanced datagrid, pero no he trabajado con el ... quizás este si tenga opciones para esto

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Abr 2009 09:58 pm
yo tambien quisiera saber como hacer que el tamanio de la fila del DataGrid sea autoajustable, ya que tengo un DataGrid dond hay una cela que contiene un ItemRenderer que muestra una List de elementos, pero la fila del data grid no se ajusta al tamanio del List contenido en una de sus celdas, podrian decirme como hacer eso por favor??

Gracias de antemano.

Por iNfzt

6 de clabLevel



 

chrome

 

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