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[i].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[i].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[i].Cognome;
colonna2.Controls.Add(cognome);
TableCell colonna3 = new TableCell(); //Creo la 3� cella della tabella (TD in HTML)
colonna3.Width = Unit.Pixel(100);
mieibutton[i].Text = "Elimina"; //elimina � il nome visibile dall'utente
mieibutton[i].CommandArgument = Convert.ToString(i); //aggiungo un argomento che corrisponde all'indice dell'array
colonna3.Controls.Add(mieibutton[i]);
//aggiungo le 3 celle (TD) alla riga (TR)
rowNew.Controls.Add(colonna1);
rowNew.Controls.Add(colonna2);
rowNew.Controls.Add(colonna3);
}
}
}
}