• User

    Raggruppamento in una select

    ciao ragazzi vorrei chiedervi il vostro aiuto per ottenere una select con raggruppamento dei valori.
    Mi spiego meglio:
    Il codice di cui sotto mi restituisce i valori trovati nel db e mi popola la select. Il problema è che ci sono tantissimi valori, mettiamo da 1 a 100.
    Vorrei poter ottenere un raggruppamento tipo da 1 a 10 (gruppo 1) da 11 a 20 (gruppo 2) e così via.
    Non credo sia impossibile ma non riesco a farlo.
    grazie in anticipo a chi vorrà aiutarmi

    <select name="Lunghezza">
    <option value=""></option>
    <%
    SQL2 = " SELECT Lunghezza FROM Prodotti WHERE Lunghezza > '0'
    Set RS2 = Conn.Execute(SQL2)

    If RS2.EOF Then RS2.MoveFirst
    Do While Not RS2.EoF
    %>
    <option value="<%=rs2("Lunghezza")%>"
    <% if RS2("Lunghezza")=Lunghezza then %>selected="selected"<%end if%>

    <%=rs2("Lunghezza")%> mm.</option>
    <%
    RS2.MoveNext
    Loop
    %>
    </select>


  • User

    Prova a dare uno sguardo qui:

    [aggiungi www].w3schools.com/tags/tag_optgroup.asp

    Dovresti poi modificare anche leggermente il codice, magari predisponendo un ciclo "padre" che gestisce i passaggi da un range all'altro (0 - 10, 10 - 20, ...) ... solo a titolo d'esempio:

    <select name="Lunghezza">

    <%
    for (int i = 0; i < max(lunghezza); i += 10)
    {
    stampa tag optgroup

    select * from prodotti where lunghezza >= i && i <= (i + 10)
    while
    {
    per ogni record -> stampa option
    }

    stampa chiusura tag optgroup
    %>
    </select>

    Marshall`


  • User

    Ciao Marshall, ti ringrazio innanzitutto per la tua attenzione.
    Purtroppo però non sono così bravo da svilupparlo da solo, potresti per favore aiutarmi un po di piu? magari facendomi solo il primo esempio poi continuo io con le altre option...
    grazie mille 😉


  • User

    Volentieri, ma il problema è che lavoro in C# e la tua sintassi non mi è molto familiare ... Provo a fare qualche pasticcio qui sotto, sperando che poi tu possa procedere da solo nell' "adattamento" o che ci sia qualcun'altro che possa darti il codice già pronto 🙂

    <select>
    <%
    // Prendi il valore massimo di Lunghezza che hai nel tuo DB
    SQL2 = " SELECT MAX(Lunghezza) FROM Prodotti
    Set RS2 = Conn.Execute(SQL2)
    
    int maxLunghezza = rs2("Lunghezza");
    
    // Qui entri in un ciclo per gestire i passaggi da un blocco di 10 all'altro (0-10, 10-20)
    for (int i = 0; i <= maxLunghezza; i += 10)
    {
    Response.Write("<optgroup label=\"" + i + " - " + (i + 10) + "\">");
    
    // Qui fai una query per prendere tutti i prodotti con lunghezza compreso nel range che stai esaminando (guarda il ciclo superiore)
    SQL2 = " SELECT Lunghezza FROM Prodotti WHERE Lunghezza > i AND Lunghezza <= (i + 10)
    Set RS2 = Conn.Execute(SQL2)
    
    If RS2.EOF Then RS2.MoveFirst
    Do While Not RS2.EoF
    
    // Semplice stampa della option per ogni elemento
    Response.Write("<option value=\"" + i + "\">" + i + "</option>");
    
    RS2.MoveNext
    Loop
    
    // Uscito dal ciclo di lettura dei records dal DB, stampi la chiusura dell'optgroup aperto prima
    Response.Write("</optgroup>"); 
    }
    %>
    </select>
    

    Marshall`


  • User

    Quanta grazia!
    non sono abituato a tanta gentilezza 😉
    Ti ringrazio ancora, questo finesettimana proverò ad adattarlo e vediamo cosa viene fuori.

    Buona giornata