Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Disporre contenuti con repeatear

    Ciao vorrei portare in .net una specie di blog creato a suo tempo con classic asp.
    Per semplificare ho 2 tabelle in access in relazione tra loro ( tb.domanda e tb.risposte)
    Bene quello che vorrei fare in net è una semplice pagina dove mi visualizza la domanda e sotto tutte le risposte a quella domanda.

    Vorrei chiedervi quali controlli consigliate.
    Ho provato a fare un test con il repetear il problema è che poi mi ripete sempre la domanda per ogni risposta
    Nel classic asp usavo 2 cicli ora ?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di ybla82
    Registrato dal
    Jan 2009
    Messaggi
    92
    ciao,
    in realtà il repeater può andare bene, solo che ne devi usare due, uno annidato dentro l'altro.

    In questo modo con il repeater più esterno stampi la domanda, e con quello più interno stampi tutte le risposte per quelle domande.

    In fase di binding, nel repater interni assocerai come DataSource le risposte alla domanda corrente.

  3. #3
    Ciao grazie per la risposta, come faccio a passarmi idmsg della prima query da dare poi alla seconda?
    Teoricamente potrei mettere una textbox hidden e valorizzarla ( come ?) per poi darla come controllo per la generazione della query??
    Ti ringrazio molto
    Ciao

  4. #4
    Utente di HTML.it L'avatar di ybla82
    Registrato dal
    Jan 2009
    Messaggi
    92
    no, guarda la soluzione da adottare è di questo tipo.

    Ti costruisci un oggetto Domanda che contiene anche una Lista Risposte.

    codice:
    public class Domanda
    {
        private int m_iDomanda;
        public int IdDomanda
        {
            get{return m_iDomanda;}
            set{m_iDomanda = value;}
        }
    
       private List<Risposta> m_aoListRisposte;
       
        public List<Risposta> ListRisposte
        {
            get{return m_aoListRisposte;}
            set{m_aoListRisposte= value;}
        }
    
    }

    Fatto questo,
    fai una serie di query per caricare in memoria tutto quello che ti serve.

    codice:
    List<Domanda> aoList = getListDomande();
    
    foreach(Domanda objD in aoList)
    {
        List<Risposta> aoListRisp = getListRisposte(objD.IdDomanda);
        objD.ListRisposte = aoListResp;
    }
    Infine associ tutto al repeater.

    codice:
    MyRepaterEsterno.DataSource = aoList;
    MyRepaterEsterno.DataBind();

    A questo punto sottoscrivi un metodo all'evento di OnItemdataBound di questo Repeater.

    Nel metodo di binding, uno die parametri della funzione contiene l'oggetto Domanda corrente.
    Non fai altro che prendere la lista di risposte dell'oggetto Domanda e fai un DataBind sul Repeater più interno.

  5. #5
    Ciao ti ringrazio,credo di aver capito il concetto del tuo esempio ma purtroppo quello che mi hai scritto non riesco a metterlo in pratica al momento nonostante del testo che mi sto leggendo per le mie ridotte conoscenze di scrittura del codice specialmente nel code behind.

    Ti chiedo se potresti fornirmi un'alternativa anche se concettualmente non ottimale ai fini della pulizia del codice.
    Ho visto che chiami il metodo OnItemdataBound del repetear non esiste un modo per valorizzare un controllo che poi mi gestisco per le risposte?

    Oppure lasciando stare il repetear non si potrebbe usare qualcosa tipo le grid view annidate?

    Grazie

  6. #6
    Utente di HTML.it L'avatar di ybla82
    Registrato dal
    Jan 2009
    Messaggi
    92
    il problema non è tanto il repeater, ma il fatto che devi comunque usare due strutture annidate.

    Un'alternativa non te la saprei dare con precisione.
    So che esistono degli oggetti che prendono come parametro una query ( mi sembra che si chiami SqlDataSource). Se riuscissi a passargli una query dinamicamente specificando di volta in volta il parametro avresti risolto.
    Io sinceramente non li uso mai, quindi èiù di tanto non ti saprei dire.

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Secondo me si può fare anche in modo diverso.
    Da quello che ho capito, ho due tabelle, di tipo REGIONI e PROVINCE.
    L'obiettivo è visualizzare tutte le regioni (domande) e, per ogni regione (domanda) tutte le province (risposte).

    Se è così, basta fare una query sola, regioni-province (domande-risposte), ordinata per domanda, risposta.

    Si crea un reader e si scansionano i record, dal primo all'ultimo.
    I risultati (html di qualunque tipo) si memorizzano nel buffer (TextBuilder) e, alla fine, con questo si popola un LiteralControl.

    Una cosa è certa: è molto più veloce di repeater (o altro) annidati ed ha la massima flessibilità.

    ps. comunque, è bene imparare ad usare la tecnica già proposta, con tutte le sue varianti

    Pietro

  8. #8
    Utente di HTML.it L'avatar di ybla82
    Registrato dal
    Jan 2009
    Messaggi
    92
    Direi che l'idea di utilizzare il Literal è ottima, soprattutto in caso della mancanza di conoscenza degli strumenti messi a disposizione da ASP.NET.

    Attenzione perchè eventuali formattazioni HTML rimangono in carico allo sviluppatore, e non al render del componente.

    In liena generale, comunque, mi sento di appoggiare l'idea di Pietro.

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.