- Home
- Categorie
- Coding e Sistemistica
- Altri linguaggi per il web
- LinkButton dinamici
-
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); } } } }