List<TextBox>

di il
17 risposte

List<TextBox>

Salve,

come visionare una lista di TextBox in una pagina ASP.NET ?

Il codice:

List<TextBox> miaList = new List<TextBox>();
miaList.Add(new TextBox());

eseguito attraverso un evento click non visiona sulla pagina alcunchè.
Va inserita in un controllo Panel la lista creata?

Grazie.

17 Risposte

  • Re: List<TextBox>

    Credo che tu debba fornire un minimo di contesto riguardo ciò che stai cercando di realizzare e il codice della pagina che hai già scritto.

    Creare una lista di oggetti di tipo TextBox non è senz'altro sufficiente a visualizzarli: come può il framework intuire dove vuoi collocarli all'interno della pagina nel suo complesso?

    Definisci un quadro più completo:
    che progetto stai realizzando?
    si tratta di una pagina ASPX oppure usi Razor?
    è un progetto basato su MVC oppure la pagina usa il "code behind" e gli eventi?

    Ciao!
  • Re: List<TextBox>

    Si tratta di una pagina aspx;

    il problema: cliccando su un Button della pagina stessa, implemento un funzione che dovrebbe far apparire una lista di controlli (Button, TextBox) creati dinamicamente (leggendo dati dal database).

    Se creo dinamicamente un Button e lo inserisco in un Panel attraverso la seguente procedura viene correttamente visualizzato nella pagina aspx:

    Button button1 = new Button();
    Panel1Controls.Add(button1);

    Ma se voglio creare dinamicamente una lista di button, ovvero una sequenza di righe, il codice postato all'inizio manca probabilmente di qualcosa, poichè lanciando la funzione attraverso il click non appare nulla.
  • Re: List<TextBox>

    josoft ha scritto:


    il codice postato all'inizio manca probabilmente di qualcosa, poichè lanciando la funzione attraverso il click non appare nulla.
    Devi semplicemente aggiungere i controlli che hai messo nella lista alla collection Controls del controllo in cui devono apparire.
  • Re: List<TextBox>

    Se faccio in questo modo:

    protected void Page_Load (object sender, EventArgs e)
    {
    List<System.Web.UI.WebControls.TextBox> List = new List<System.Web.UI.WebControls.TextBox>();

    System.Web.UI.WebControls.TextBox TextBox1 = new System.Web.UI.WebControls.TextBox();

    List.Add(TextBox1);

    System.Web.UI.WebControls.Panel1.Controls.Add(List);
    }

    mi dice 'object' non contiene una definizione di 'Add' e non è stato trovato alcun metodo di estensione accessibile 'Add' che accetta un primo argomento di tipo 'object'.

    Mi sembra che le direttive ci siano tutte.
  • Re: List<TextBox>

    Siamo sicuri che il codice sia esatto?

    Questa riga non ha molto senso:
    System.Web.UI.WebControls.Panel1.Controls.Add(List);
    Se il pannello si chiama Panel1, allora va scritto senza tutto il prefisso, ossia senza System.Web.UI.WebControls, che rappresenta invece il namespace in cui si trova la classe Panel.

    Il concetto di classe e istanza della stessa devono essere ben chiari.

    Ciao!
  • Re: List<TextBox>

    Scrivere la riga con o senza namespace è lo stesso; ce l'ho scritto per far vedere quale classe viene utilizzata (se scrivo il codice senza quel prefisso ottengo lo stesso risultato) .
    Il problema è come visionare la lista di controlli creata nel Panel o eventualmente nella pagina apx anche senza Panel.
  • Re: List<TextBox>

    Salve,
    non scrivo mai codice asp.net, ma mi pare che System.Web.UI.WebControls.Panel1.Controls.Add non abbia l'overload che tu gli passi, cioe' una lista di controlli , https://docs.microsoft.com/it-it/dotnet/api/system.web.ui.controlcollection.add?view=netframework-4.8#System_Web_UI_ControlCollection_Add_System_Web_UI_Control_

    prova solo a ciclare per List e fare un add di ogni membro di List...

    saluti omnia
    --
    Andrea
  • Re: List<TextBox>

    Se creo dinamicamente un Button e lo inserisco in un Panel attraverso la seguente procedura viene correttamente visualizzato nella pagina aspx utilizzando 'System.Web.UI.WebControls':

    TextBox textBox1 = new TexBox();
    Panel1Controls.Add(textBox1);

    Ma se al codice precedente aggiungo la lista:

    List list = new List();
    TextBox textBox1 = new TextBox();
    list.Add(textBox1);
    Panel1.Controls.Add(list);

    mi da l'errore su 'Add' nelle ultime due righe "nessun metodo per Add".

    ---------------

    Se invece uso 'System.Windows.Forms' ottengo lo stesso errore su 'Add' ma solo nell'ultima riga.

    Panel1.Controls.Add(List);
  • Re: List<TextBox>

    Salve,
    forse non sono riuscito a spiegarmi...
    hai per caso provato
    
            protected void Page_Load(object sender, EventArgs e)
            {
    
                List<System.Web.UI.WebControls.TextBox> List = new List<System.Web.UI.WebControls.TextBox>();
    
                System.Web.UI.WebControls.TextBox TextBox1 = new System.Web.UI.WebControls.TextBox();
                TextBox1.ID = "TextBox1";
                List.Add(TextBox1);
    
                System.Web.UI.WebControls.TextBox TextBox2 = new System.Web.UI.WebControls.TextBox();
                TextBox2.ID = "TextBox2";
                List.Add(TextBox2);
    
                foreach (System.Web.UI.WebControls.TextBox element in List)
                {
                    Panel1.Controls.Add(element);
                }
    
            }
    
    dove, come dicevo prima, carichi tutti i controlli nella List, e poi ciclando la List, carichi da questa i controlli in Panel1...

    saluti omnia
    --
    Andrea
  • Re: List<TextBox>

    josoft ha scritto:


    Scrivere la riga con o senza namespace è lo stesso
    No, non è la stesa cosa, perché il namespace ha un suo significato ben preciso e non va utilizzato a sproposito, altrimenti sfido io che non funziona nulla.

    josoft ha scritto:


    ce l'ho scritto per far vedere quale classe viene utilizzata
    Devi riportare il codice esattamente come l'hai scritto, e non cambiarlo al volo sul forum, altrimenti finisce che ci concentriamo su errori che in realtà non sono presenti nel programma mentre perdiamo di vista quelli reali, nella migliore delle ipotesi, mentre nella peggiore non ci si capisce nulla.

    josoft ha scritto:


    se scrivo il codice senza quel prefisso ottengo lo stesso risultato
    Impossibile, dato che usare il namespace significherebbe riferirsi alla classe Panel, mentre la classe "Panel1" non esiste.

    josoft ha scritto:


    Il problema è come visionare la lista di controlli creata nel Panel o eventualmente nella pagina apx anche senza Panel.
    Con o senza Panel, nella pagina serve obbligatoriamente un controllo che possa contenere la lista dei controlli, perché da qualche parte devono trovare posto. Poi, quel posto potrebbe essere anche la pagina stessa, se proprio non vuoi usare un contenitore.

    Comunque sia, i controlli che crei e che inserisci nella lista (per tua comodità, suppongo) devono essere comunque inseriti nella collection dei Controls del genitore in cui vanno visualizzati, come predetto.

    josoft ha scritto:


    Panel1.Controls.Add(list);
    mi da l'errore su 'Add' nelle ultime due righe "nessun metodo per Add".
    Come ti è stato detto da un altro utente, il metodo Add è corretto ma non ne esiste una versione che accetta una serie di controlli (una lista o un array), ma puoi inserire solo un controllo alla volta.

    Poco male: come ti è stato suggerito, fai un e inserisci singolarmente in controlli; in pratica, la modalità è la stessa con cui inserisci i controlli nella lista, sempre uno alla volta.

    Quindi o scrivi
    
    List list = new List();
    TextBox textBox1 = new TextBox();
    list.Add(textBox1);
    panel1.Controls.Add(textBox1);
    
    oppure completi la lista e alla fine inserisci tutti i controlli della lista nel pannello, così:
    
    foreach(var control in list)
      panel1.Controls.Add(control);
    

    josoft ha scritto:


    Se invece uso 'System.Windows.Forms' ottengo lo stesso errore su 'Add' ma solo nell'ultima riga.
    Non puoi assolutamente usare il namespace System.Windows.Forms! Quelli sono i controlli per le finestre quando sviluppi applicazioni di tipo Windows Forms, e non hanno nulla a che vedere con la controparte Web, se non che funzionano in modo simile benché i primi stiano in una finestra grafica di Windows, i secondi in una pagina Web.

    Fai le verifiche del caso, ma se posti il codice, riportalo correttamente, altrimenti è ancora più difficile darti supporto.

    Ciao!
  • Re: List<TextBox>

    Ecco il codice con il quale ho fatto verifiche utilizzando 'System.Web.UI.WebControls':

    protected void Page_Load(object sender, EventArgs e)
    {

    List<TextBox> list = new List<TextBox>();

    TextBox TextBox1 = new TextBox();

    list.Add(TextBox1);

    TextBox TextBox2 = new TextBox();

    list.Add(TextBox2);

    foreach (TextBox element in list)
    {
    Panel1.Controls.Add(element);
    }

    }

    da il solito errore su 'Add' nell'ultima riga.
  • Re: List<TextBox>

    Posta anche la parte rilevante del codice nella pagina ASPX.
  • Re: List<TextBox>

    Va forse costruito il metodo 'Add' ?
  • Re: List<TextBox>

    <form id="form1" runat="server">
    <asp:Button ID="Button1" runat="server" Height="56px" OnClick="Button1_Click" Text="List" Width="52px" />
    <div>
    </div>

    <asp:Panel ID="Panel1" runat="server" Height="142px">
    </asp:Panel>

    </form>
Devi accedere o registrarti per scrivere nel forum
17 risposte