Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Franz78
    Registrato dal
    Sep 2004
    Messaggi
    730

    menu contestuale su gridview

    come da titolo, mi servirebbe implementare un menu contestuale in una gridview,
    qualche idea?
    ne ho visti diversi anche con jquery ma non ho modo di passare poi il parametro della riga della griglia.(o per lo meno non l'ho trovato)

    é capitata a qualcuno questa problematica?
    suggerimenti , idee , qualsiasi cosa grazie!!

  2. #2
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    Scusami potresti essere piu preciso ? cosa significa un menu contestuale su di una gridview? un filtro forse?

  3. #3
    Utente di HTML.it L'avatar di Franz78
    Registrato dal
    Sep 2004
    Messaggi
    730
    associare ad ogni riga del menu, alla pressione del tasto destro un menu contestuale, che mi permette diverse azioni su quella riga.


  4. #4
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    ok.. ora ho capito

    non so se ti puo tornare utile comunque puoi sfruttare l'evento RowCommand della GridView per capire quale riga lo ha lanciato ovviamente hai un postback di mezzo

    http://msdn.microsoft.com/it-it/libr...owcommand.aspx

  5. #5
    Utente di HTML.it L'avatar di Franz78
    Registrato dal
    Sep 2004
    Messaggi
    730
    x capire la riga ci son altri mezzi + efficaci
    il problema è proprio la visualizzazione del menu', fare una cosa abbastanza intelligente e non magari un menu nascosto in ogni riga......
    vabeh seguito a cercare..



  6. #6
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    facci sapere se trovi qualcosa di interessante


  7. #7
    Utente di HTML.it L'avatar di Franz78
    Registrato dal
    Sep 2004
    Messaggi
    730

    Soluzione

    Alla fine ho fatto questa cosa, ho ripreso un vecchio codice che avevo fatto tempo fa e l'ho adattato.
    Posto che magari puo' servire a qualcuno.

    Parte javascript
    codice:
    // -----------------------------------------------------------------
    // la funzione restituisce le coordinate di un elemento
    // -----------------------------------------------------------------
     function getPageCoords (element) {
            var coords = {x: 0, y: 0};
            while (element) {
                coords.x += element.offsetLeft;
                coords.y += element.offsetTop;
                element = element.offsetParent;
            }
                return coords;
        }
    
         function locateObject(n, d) { //v3.0
            var p,i,x;
            if(!d) d=document;
            if((p=n.indexOf("?"))>0&&parent.frames.length)
            {
                d=parent.frames[n.substring(p+1)].document;
                n=n.substring(0,p);
            }
            
            if(!(x=d[n])&&d.all) x=d.all[n];
            for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
            for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=locateObject(n,d.layers[i].document);
            return x;
        }
    
    
    
    // -----------------------------------------------------------------
    // visualizza il menu
    // -----------------------------------------------------------------
    function showMenu(val,altezza)
    {
    //si costruisce il menù
    
    menu='<table border="0" width="130" id="tblContestuale" cellspacing="0" cellpadding="3">';
    menu+='<tr><td><a href=\"pag1.aspx?ID='+val+'\">Voce 1</a><td><tr>';
    menu+='<tr><td><a href=\"pag2.aspx?ID='+val+'\">Voce 2</a><td><tr>';
    menu+='<tr><td><a href=\"pag3.aspx?ID='+val+'\">Voce 3</a><td><tr>';
    menu+='<tr><td><a href=\"pag4.aspx?ID='+val+'\">Voce 4</a><td><tr>';
    menu+='<tr><td><a href=\"pag5.aspx?ID='+val+'\">Voce 5</a><td><tr>';
    menu+='<tr><td><a href=\"pag6.aspx?ID='+val+'\">Voce 6</a><td><tr>';
    menu+='</table>';
    
    locateObject('MenuCont').style.top=altezza+10 //la funzione mi riprende l'oggetto MenuCont a cui passa la nuova altezza
    menuv = menu.replace(';','');
    locateObject('MenuCont').innerHTML = menuv
    
    //si calcola la left
    // -----------------------------------------------------------------
    if ((event.x + locateObject('MenuCont').clientWidth) > (document.body.clientWidth + document.body.scrollLeft))
    	locateObject('MenuCont').style.left = (document.body.clientWidth + document.body.scrollLeft) - locateObject('MenuCont').clientWidth-10;
       else
    
             locateObject('MenuCont').style.left=document.body.scrollLeft+event.clientX;
              
            
    // si calcola la top
    // -----------------------------------------------------------------
    if ((event.y + locateObject('MenuCont').clientHeight) > (document.documentElement.clientHeight))
    	locateObject('MenuCont').style.top = document.documentElement.scrollTop+event.y-locateObject('MenuCont').clientHeight;
    
    MenuCont.style.visibility="visible";
    document.getElementById("divWait").style.display = 'none';
    
    }
    
    
    // funzione che nasconde il menù
    function hideMenu()
    {
    if (document.all)
    {
    locateObject('MenuCont').style.visibility="hidden"
    locateObject('MenuCont').style.left = 1;
    locateObject('MenuCont').style.top = 1;
    return false
    }
    else if (document.layers)
    {
    locateObject('MenuCont').visibility="hide"
    locateObject('MenuCont').left = 1;
    locateObject('MenuCont').top = 1;
    return false
    }
    else
    return true
    }
    nell'html viene definito il DIV del menù

    codice:
    <div id="MenuCont" style="position: absolute; visibility: hidden; width: 100px; z-index: 1000;
    left: 0; top: 0">
    </div>

    lato server nel Page_Load della pagina viene aggiunta la riga sottostante,
    al click con il tasto sinistro nel gridview il menù contestuale viene nascosto.

    codice:
    grdTest.Attributes.Add("onclick", "hideMenu()");
    Infine nell'evento RowDataBound del gridview, io l'ho messo solo nella cella 1 , ma volendo con un ciclo si puo' mettere in tutta la riga.

    codice:
    e.Row.Cells[1].Attributes.Add("oncontextmenu", "p=getPageCoords(this);showMenu('" + rowView.Id + "',p.y);return false;");
    Sicuramente ci sono modi migliori..ma al momento mi è uscito questo

    ciao ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.