• User

    Aggiungere gruppo righe a tabella

    Salve a Tutti,

    ho una tabella che riempio tramite php leggendo i dati da un db mysql.
    in diversi punti della tabella inserisco dei pulsanti che mi dovrebbero permettere di aggiungere delle ulteriori righe di dettaglio prese sempre dal db.

    Con FF ho risolto utilizzando innerHTML sull'oggetto tbody ma questo metodo non funziona con IE7 perche' tbody e' read only.

    Esiste un metodo alternativo per farlo funzionare anche su IE7?

    Grazie in anticipo

    Saluti
    nic96


  • Super User

    Ciao vnic96 e Benvenuto nel Forum GT.

    Non sono riuscito a capire nel dettaglio il problema però posso segnalarti questo link in cui viene illustrata l'alternativa a innerHTML ossia il metodo DOM-based: innerHTML alternatives


  • User

    Grazie per il benvenuto e per la risposta.

    Scusa se sono stato poco chiaro, provo a spiegarmi.

    Ho una tabella (DB mysql) in cui memorizzo i seguenti dati:

    "prodotto", "macroprodotto", "magazzino", "quantità".

    Tramite PHP creo una pagina html che visualizza questi dati in forma tabellare.
    I dati visualizzati sono raggruppati per "macroprodotto", quindi il risultato sarà il seguente:

    _______________magazzino1 magazzino2 magazzino3
    macroprodotto A___quantità1__quantità2___quantità3
    +
    macroprodotto B___quantità1__quantità2___quantità3
    +

    Tra un macroprodotto e l'altro inserisco un pulsante (+) che dovrebbe attivare il dettaglio per prodotto del macroprodotto stesso come segue:

    _________________"magazzino1""magazzino2""magazzino3"
    "macroprodotto A"___quantità1____quantità2____quantità3

    __"prodotto1"_______quantità_____quantità_____quantità
    __"prodotto2"_______quantità_____quantità_____quantità
    __"prodotto3"_______quantità_____quantità_____quantità

    "macroprodotto B"___quantità_____quantità_____quantità
    +

    I records della tabella sono veramente tanti quindi non posso creare la pagina staticamente e nascondere o visualizzare parti della stessa perciò devo gestire il tutto dinamicamente.

    Con il il metodo DOM-based, per quel che ho potuto capire, posso creare le nuove righe della tabella ma non ho capito come leggere i dati dal DB e visualizzarli nelle strutture create.

    Con innerHtml riesco a farlo ma funziona solo su firefox mentre a me serve che funzioni su IE6 e IE7.

    Ho cercato qualche esempio a riguardo ma non ho ancora trovato nulla.

    Grazie in anticipo

    Saluti
    vnic96


  • Super User

    Non riesco a capire come riescie a funzionare con innerHTML.
    InnerHTML serve per inserire del codice HTML in un nodo.
    Per esempio:

    
    document.getElementById("miodiv").innerHTML = '<strong>Esempio</strong>'
    
    

    Questo metodo non legge comunque i dati dal database.
    Per leggere i dati dal database devi effettuare una chiamata asincrona ad un'altra pagina. Questa richiesta va fatta tramite l'oggetto XMLHttpRequest.

    P.S.: Perchè non utilizzi un framework javascript, per esempio jQuery? Con poche righe faresti ciò che hai descritto.


  • User

    Si, l'ho fatto proprio così ma non ho utilizzato div ma tbody.

    è possibile utilizzare un div all'interno di una tabella al posto del tbody in modo da poter appendere un gruppo di righe?


  • Super User

    @vnic96 said:

    è possibile utilizzare un div all'interno di una tabella al posto del tbody in modo da poter appendere un gruppo di righe?

    No, non puoi.
    Però potresti appendere n righe, oppure una sola riga con una cella in cui è contenuto il div.


  • User

    si ma così perdo l'allineamento con il resto della tabella.
    attualmente funziona così come dici tu (se ho ben capito il tuo msg) ma mi richiedono l'allineamento tra le righe del dettaglio e quelle che lo precedono


  • User

    Potrei ovviare con xml.

    Potrei farmi un file xml per ogni macroprodotto e leggerlo con una funzione javascript e con il metodo dom potrei aggiungere e popolare le nuove righe.

    Non ho mai utilizzato xml, pensi possa essere troppo lento leggere un xml?


  • Super User

    @vnic96 said:

    potrei ovviare con xml

    potrei farmi un file xml per ogni macroprodotto e leggerlo con una funzione javascript e con il metodo dom potrei aggiungere e popolare le nuove righe.

    Con il javascript non devi leggere obbligatoriamente un file xml, ma anche un file di testo o html.
    @vnic96 said:

    non ho mai utilizzato xml, pensi possa essere troppo lento leggere un xml?
    No, non è lento, anzi nelle web application più professionali viene usato xml o json.


  • User

    grazie pe la pazienza

    appena possibile proverò a seguire questa strada

    Saluti
    vnic96


  • Super User

    @vnic96 said:

    grazie pe la pazienza
    appena possibile proverò a seguire questa strada

    Figurati.
    Tieni in considerazione il suggerimento di utilizzare un framework come jQuery o altro equipollente. Ti semplifica di parecchio la vita.


  • User

    rieccomi

    con javascript e xml funziona ma su IE7 è di una lentezza spaventosa!!

    IExplorer.exe occupa la cpu al 100% fino a quando non ha finito.

    Hai qualche suggerimento?

    Domani farò altre prove per capire se il problema è nella lettura del file xml o nella generazione della struttura tr/td che vado ad appendere al tbody


  • User

    il problema sta nella costruzione della struttura. funziona perfettamente con FF ma con IE7 e' lentissima.

    ecco il codice

    
    var tbody = document.getElementById("details_"+tester);
    var prodotti = xml.getElementsByTagName("prodotto");
     for (var i = 0; i < prodotti.length; i++) {
         var e = prodotti*;//leggo i nodi
         var d1 = e.getElementsByTagName("D1")[0].firstChild.data;
         .
         .
         var dn = e.getElementsByTagName("Dn")[0].firstChild.data;
    
         row = tbody.insertRow(i + 1);
         row.insertCell(0).appendChild(document.createTextNode(""));
         row.insertCell(1).appendChild(document.createTextNode(""));             
         row.insertCell(2).appendChild(document.createTextNode(D1));
         row.insertCell(3).appendChild(document.createTextNode(""));
         row.insertCell(4).appendChild(document.createTextNode(D2));
         row.insertCell(5).appendChild(document.createTextNode(""));
         row.insertCell(6).appendChild(document.createTextNode(D3));
         row.insertCell(7).appendChild(document.createTextNode(""));
         row.insertCell(8).appendChild(document.createTextNode(D4));
         row.insertCell(9).appendChild(document.createTextNode(""));
         row.insertCell(10).appendChild(document.createTextNode(D5));
         row.insertCell(11).appendChild(document.createTextNode(""));
         row.insertCell(12).appendChild(document.createTextNode(D6));
         row.insertCell(13).appendChild(document.createTextNode(""));
         row.insertCell(14).appendChild(document.createTextNode(D7));
         row.insertCell(15).appendChild(document.createTextNode(""));
         row.insertCell(16).appendChild(document.createTextNode("D8"))
         row.insertCell(17).appendChild(document.createTextNode(""));
         row.insertCell(18).appendChild(document.createTextNode(D9));
         row.insertCell(19).appendChild(document.createTextNode(""));
         row.insertCell(20).appendChild(document.createTextNode(D10));
         row.insertCell(21).appendChild(document.createTextNode(""));
         row.insertCell(22).appendChild(document.createTextNode("D11"))
    }
    document.getElementById('img1_'+prod).style.display="none";
    document.getElementById('img2_'+prod).style.display="";
    document.getElementById('details_'+prod).style.display="";
    
    ```il bello e' che dovrei ancora aggiungere altre 26 colonne!!
    
    esiste un altro modo per creare le righe da aggiungere al tbody?
    
    grazie in anticipo
    
    Saluti
    vnic96

  • User

    ho sostituito row.insertcell con createelement per tr e td

    cosi' sembra andare decisamente meglio.