• User Attivo

    LinkButton dinamici

    Ciao a tutti, vi spiego quello che vorrei fare.

    Pagina aspx con una casella di testo e un button, al click del button, voglio memorizzare l'informazione scritta nella casella di testo in una lista (la lista successivamente verrà salvata in un viewstate) e visualizzarla in una riga di una tabella dinamica (asp:Table). La riga creata dovrà contenere il nome scritto nella casella di testo(nella prima colonna) e un linkbutton con la scritta "elimina" (nella seconda colonna).

    Al click del linkbutton voglio eliminare l'informazione dalla lista e la riga della tabella contenente il pulsante selezionato.

    NON VOGLIO USARE LA GRIDVIEW..

    Io ho provato a scrivere questo codice, per� per aggiungere o eliminare la riga devo cliccare 2 volte!!!!

    Mi potreste aiutare�.

    
    <body>
        <form id="form1" runat="server">
            <asp:TextBox ID="txtnome" runat="server"></asp:TextBox>
            <asp:TextBox ID="txtcognome" runat="server"></asp:TextBox>
            <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
            <asp:Table ID="tbl" runat="server" />
        </form>
    </body>
    
    
    using System;
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    
    public partial class Index : System.Web.UI.Page
    {
        private List<Auto> miaList;
        private List<LinkButton> mieibutton;
    
        protected void Page_Load(object sender, EventArgs e)
        {
            if (ViewState["contenitore"] is List<Auto>)
            {
                miaList = (List<Auto>)this.ViewState["contenitore"];
       
            }else{
                miaList = new List<Auto>();
                this.ViewState["contenitore"] = miaList;
            }
            mieibutton = new List<LinkButton>();
            for (int i = 0; i < miaList.Count+1; i++){
                mieibutton.Add(new LinkButton());
                mieibutton*.Command += mioAscoltatore; //l'evento command � simile al click, con la differenza che l'argomento passato al metodo mioascoltatore � CommandEventArgs e non EventArgs
            }
            this.caricaTabella();
        }
    
        private void mioAscoltatore(object sender, CommandEventArgs e)
        {
            int IDrigaDaEliminare = Convert.ToInt16(e.CommandArgument);// il metodo CommandArgument, esisto solamente perch� nella firma abbiamo l'oggetto CommandArgument
            miaList = (List<Auto>)this.ViewState["contenitore"];
            miaList.RemoveAt(IDrigaDaEliminare);
            this.ViewState["contenitore"] = miaList;
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            miaList = (List<Auto>)this.ViewState["contenitore"];
            miaList.Add(new Auto(txtnome.Text,txtcognome.Text));
            this.ViewState["contenitore"] = miaList;
        }
        public void caricaTabella(){
            miaList = (List<Auto>)this.ViewState["contenitore"];
            if (miaList.Count > 0)
            {
                tbl.Controls.Clear(); //Tabella inserita nella pagina HTML
    
                for (int i = 0; i < miaList.Count; i++)
                {
                    TableRow rowNew = new TableRow(); //Creo una nuova riga (TR HTML)
                    tbl.Controls.Add(rowNew); //Inserisco la riga nella tabella precedentemente creata
    
    
                    TableCell colonna1 = new TableCell(); //Creo la 1� cella della tabella (TD in HTML)
                    colonna1.Width = Unit.Pixel(100); //specifico la larghezza della cella (TD in HTML)
                    Label nome = new Label(); //Istanzio un oggetto label 
                    nome.Text = miaList*.Nome; //Memorizzo il nome contenuto nella lista
                    colonna1.Controls.Add(nome); //aggiungo l'oggetto label nella cella (TD in HTML)
    
                    TableCell colonna2 = new TableCell(); //Creo la 2� cella della tabella (TD in HTML)
                    colonna2.Width = Unit.Pixel(100);
                    Label cognome = new Label();
                    cognome.Text = miaList*.Cognome;
                    colonna2.Controls.Add(cognome);
    
                    TableCell colonna3 = new TableCell(); //Creo la 3� cella della tabella (TD in HTML)
                    colonna3.Width = Unit.Pixel(100);
    
                    mieibutton*.Text = "Elimina"; //elimina � il nome visibile dall'utente
                    mieibutton*.CommandArgument = Convert.ToString(i); //aggiungo un argomento che corrisponde all'indice dell'array
    
    
                    colonna3.Controls.Add(mieibutton*);
    
                    //aggiungo le 3 celle (TD) alla riga (TR)
                    rowNew.Controls.Add(colonna1);
                    rowNew.Controls.Add(colonna2);
                    rowNew.Controls.Add(colonna3);
                }
            }
         }
    }