• Publicidad (ayudanos a mantener el Foro haciendo un click sobre la misma)
  • Cuixer, una forma de administrar páginas web que nunca viste!

 Tema solucionado [R] menu con boton derecho sobre una grilla

Foros generales de ayuda Ext 2.0.
Avatar de Usuario
Ext.foro.Miembro
Mensajes: 152
Registrado: 02 May 2008, 12:36
Ubicación: Santiasko, Chile
NotaPublicado: 19 Ago 2008, 16:25
hola a todos....
tengo una duda se puede y como se puede hacer un menu especie windows que cuando uno pinche sobre un elemento de la grilla con el boton derecho del mouse aparezca un menu con opciones como borrar, editar ?

creo que una vez lo vi o lo soñe....pero no he podido encontrar algo similiar

ojala me ayuden saludos
gracias
Para no ver esta publicidad, debes ser usuario del Foro.
Publicidad (ayudanos a mantener el Foro haciendo un click sobre la misma)


Cuixer, una forma de administrar páginas web que nunca viste!

Avatar de Usuario
Ext.foro.Administrador
Mensajes: 1932
Registrado: 07 Mar 2008, 20:45
Ubicación: Argentina
NotaPublicado: 20 Ago 2008, 01:37
Si se puede hacer, fijate si te sirve de algo ESTE thread.

Suerte.
Aprender haciendo...
Desarrollo de aplicaciones en ExtJS [CONSULTAR].
Buscar en el foro antes de preguntar y Leer la Documentación.
Imagen
Avatar de Usuario
Ext.foro.Miembro
Mensajes: 152
Registrado: 02 May 2008, 12:36
Ubicación: Santiasko, Chile
NotaPublicado: 21 Ago 2008, 18:45
si lo vi pero, no se como obtener el xy del boton y como hacer el listener con el boton derecho solo conozco el rowdbclick y el rowclick

:S

gracias garras como siempre
Avatar de Usuario
Ext.foro.Administrador
Mensajes: 1932
Registrado: 07 Mar 2008, 20:45
Ubicación: Argentina
NotaPublicado: 22 Ago 2008, 10:32
Ronhead escribió:si lo vi pero, no se como obtener el xy del boton y como hacer el listener con el boton derecho solo conozco el rowdbclick y el rowclick

:S

gracias garras como siempre

Proba agregándole esto:
Código: Seleccionar todo
grid.contextMenu.showAt(xy);
Aprender haciendo...
Desarrollo de aplicaciones en ExtJS [CONSULTAR].
Buscar en el foro antes de preguntar y Leer la Documentación.
Imagen
Avatar de Usuario
Ext.foro.Miembro
Mensajes: 152
Registrado: 02 May 2008, 12:36
Ubicación: Santiasko, Chile
NotaPublicado: 22 Ago 2008, 11:02
grid.contextMenu is undefined
ese error me sale....

tengo definido asi

Código: Seleccionar todo
   var contextmenu = new Ext.menu.Menu({
     id: 'contextMenu',
     items: [ 
      {
         text: 'Bajar...',
         icon:'icons/download.png'             
      },{
         text: 'Editar...',
         icon:'icons/edit.png'             
      },{
         text: 'Borrar',
         icon:'icons/delete.gif'               
      }]
   });

GRILLA

Código: Seleccionar todo
var grid = new Ext.grid.GridPanel({
         store: store,
         columns: [
            {header: "Tipo de Pago", width: 120, dataIndex: 'local', sortable: true},
             {header: "Transacciones", width: 180, dataIndex: 'codigo', sortable: true},
             {header: "Monto Recaudado", width: 180, dataIndex: 'nombre', sortable: true}
         ],
         listeners: {
                   rowdblclick: function(event){
                        if( grid.selModel.hasSelection()){
                          var selectedRow = grid.getSelectionModel().getSelected();
                           
                          var valor = selectedRow.get("loc_numero");
                  

               grid.contextMenu.showAt(xy);

               
                           }
                  }
            },


   

         viewConfig: {forceFit: true},
         sm: new Ext.grid.RowSelectionModel({singleSelect:true}),
         /************************************************************
          * Añade paginación en la barra inferior de la ventana
          ************************************************************/
         bbar: new Ext.PagingToolbar({
                 pageSize: 10,
                 store: store,
                 displayInfo: true,
                 displayMsg: "Mostrando {0} - {1} de {2}"
             }),
         stripeRows: true,
         width:1024,
         height:450,
         frame: false,
         title: 'Se incluye venta y recaudacion (Monto Venta - Vuelto)',
         loadMask: {msg:'Cargando Datos...'}
      });
   
     grid.render('grid-example');

    grid.getSelectionModel().selectFirstRow();
Avatar de Usuario
Ext.foro.Miembro
Mensajes: 152
Registrado: 02 May 2008, 12:36
Ubicación: Santiasko, Chile
NotaPublicado: 22 Ago 2008, 12:01
por ahora tengo esto...

Código: Seleccionar todo
listeners: {
               cellcontextmenu:function(e){
            
                  x = event.clientX + document.body.scrollLeft;
                  y = event.clientY + document.body.scrollTop;

                        if( grid.selModel.hasSelection()){
                          var selectedRow = grid.getSelectionModel().getSelected();
                          var valor = selectedRow.get("loc_numero");
                    contextmenu.showAt([x, y]);
                           }
                  
                  }

funciona solo en IE, en mozilla me lanza un error de event is not defined....., Pero me sale el menu de ayuda de IE y el menu contextmenu
ojala alguien sepa como optimizar esto!

muchas gracias
Avatar de Usuario
Ext.foro.Administrador
Mensajes: 1932
Registrado: 07 Mar 2008, 20:45
Ubicación: Argentina
NotaPublicado: 24 Ago 2008, 05:42
Proba haciendo:
Código: Seleccionar todo
function grid_rowcontextmenu(grid, rowIndex, e){
   e.stopEvent();
   var xy = e.getXY();
   grid.contextMenu=conMenu;
   grid.contextMenu.showAt(xy);
   event.cancelBubble=true;
}

Y llamar la función de la siguiente manera:
Código: Seleccionar todo
listeners: {
   cellcontextmenu:grid_rowcontextmenu()
}

Suerte.
Aprender haciendo...
Desarrollo de aplicaciones en ExtJS [CONSULTAR].
Buscar en el foro antes de preguntar y Leer la Documentación.
Imagen
Avatar de Usuario
Ext.foro.Miembro
Mensajes: 152
Registrado: 02 May 2008, 12:36
Ubicación: Santiasko, Chile
NotaPublicado: 24 Sep 2008, 13:34
pero por que me dice que e no existe?

e is undefined
var xy = e.getXY();
Avatar de Usuario
Ext.foro.Administrador
Mensajes: 1932
Registrado: 07 Mar 2008, 20:45
Ubicación: Argentina
NotaPublicado: 25 Sep 2008, 10:59
Mostranos tu código.
Aprender haciendo...
Desarrollo de aplicaciones en ExtJS [CONSULTAR].
Buscar en el foro antes de preguntar y Leer la Documentación.
Imagen

Ext.foro.Miembro
Mensajes: 244
Registrado: 15 Dic 2007, 22:03
Ubicación: Madrid-Spain
NotaPublicado: 25 Sep 2008, 11:59
Os pongo el código que he conseguido que sea totalmente funcional, de menu contextual al boton derecho del ratón, en un grid.

Esta es la función que me muestra el menu contextual:

Código: Seleccionar todo
  /***************************************************************
    * añadir un menu contextual en cada fila del grid
    ***************************************************************/
var contextmenu = new Ext.menu.Menu({
        id: 'contextMenu',
        allowOtherMenus: false,
        items: [ 
       {
           text: 'Añadir Documentos a este registro',
           handler: function() {
             var selectedId = gridPanel.selModel.selections.keys;
             if (selectedId.length > 0) {
                  var record = gridPanel.selModel.getSelections();
                  var indice = record[0].get('num_bar');
                new formDocBar(dataStore, indice);
                win.hide();
             }
             else
             {
                Ext.MessageBox.alert('Error',
                'Para añadir documentos adjuntos, por favor seleccione
al menos un registro al que adjuntar documentos'
                );
             }             
         },
           iconCls:'upload-icon'             
       },'-',{
           text: 'Editar este registro',
           handler: function(){
               // action para modificar el usuario seleccionado ahora
              var selectedKeys = gridPanel.selModel.selections.keys;
             if(selectedKeys.length > 0) // comprobamos que exista un registro seleccionado
             {
                  new editBar(dataStore, selectedKeys);
                  win.hide();             
             }
             else
             {
                Ext.MessageBox.alert('Error',
                'Para modificar un registro, por favor seleccione
al menos un registro para continuar'
                );
             }       
           },
           iconCls:'edit'             
       },'-',{
           text: 'Borrar este registro',
           handler: function(){
               // action para borrar el usuario seleccionado ahora
              var selectedKeys = gridPanel.selModel.selections.keys;
             if(selectedKeys.length > 0)
             {
                var record = gridPanel.selModel.getSelections();
                  var indice01 = record[0].get('num_bar');
                  var indice02 = record[0].get('nombre_establecimiento');
                  var registro = "Id: " + selectedKeys + "
Núm.: " + indice01 + " Nombre: " + indice02;
                deleteBar(dataStore, gridPanel, selectedKeys, registro);
              }else{
                Ext.MessageBox.alert('Error',
                 'Para borrar un registro, por favor seleccione
al menos un registro para continuar'
                );
             }
           },
           iconCls:'remove'               
       }]
});

Y ésta es la llamada al menu contextual, una vez que haga click raton derecho en el grid:

Código: Seleccionar todo
    gridPanel.on('rowcontextmenu', function(gridPanel, rowIndex, e) {
       contextmenu.showAt(e.getXY());
   });

siendo gridPanel el nombre de la variable donde he definido el grid, no la ventana donde lo muestro.

Saludos
Carlos Torres
Madrid-Spain
http://www.tsabogados.com Mi primer proyecto EXTjs
Avatar de Usuario
Ext.foro.Miembro
Mensajes: 152
Registrado: 02 May 2008, 12:36
Ubicación: Santiasko, Chile
NotaPublicado: 26 Sep 2008, 16:58
muchas gracias revisare el codigo y les cuento :D
Avatar de Usuario
Ext.foro.Miembro
Mensajes: 152
Registrado: 02 May 2008, 12:36
Ubicación: Santiasko, Chile
NotaPublicado: 02 Oct 2008, 19:26
ec-cts Muchas gracias
puse tu codigo, lo modifique un poco y funciono tanto para IE como FF,
asi que Gracias!

Caso cerrado xD

Ext.foro.Nuevo
Mensajes: 6
Registrado: 21 Dic 2010, 13:23
NotaPublicado: 29 Dic 2010, 15:57
esta perfecta la función pero tengo un problema en firefox como hago para esconder el menu normal del explorador ya queda encima del contextmenu tapandolo. Gracias
Avatar de Usuario
Ext.foro.Nuevo
Mensajes: 7
Registrado: 29 Mar 2011, 12:51
NotaPublicado: 30 Mar 2011, 16:20
Prueba esto:

Ext.getBody().on("contextmenu", Ext.emptyFn, null, {preventDefault: true});
NEMES

Volver a Ext 2.0: Ayuda





  • Publicidad (ayudanos a mantener el Foro haciendo un click sobre la misma)
  • Cuixer, una forma de administrar páginas web que nunca viste!