adicionar itens a um ArrayList quando um botão na gridview é clicado
Pergunta
Eu preciso adicionar o itemid da lista de linhas quando clico em 'adicionar ao carrinho' botão na gridview, eu era capaz de passar este itemid a um ArrayList.
Mas o problema é que toda vez que eu clique no botão itemid anterior será substituído pelo novo item em vez eu quero que o ArrayList para expandir.
public partial class Drama_k : System.Web.UI.Page
{
string Cn=@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ewap_k.mdf;Integrated Security=True;User Instance=True";
ArrayList arrValues = new ArrayList(4);
protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName=="AddToCart")
{
int index = Convert.ToInt32(e.CommandArgument);
Session["item"] = GridView2.DataKeys[index].Value.ToString();
arrValues.Add(Session["item"]);
GridView1.DataSource = arrValues;
GridView1.DataBind();
}
}
}
Solução
Não se esqueça que o ArrayList não está armazenado em algum lugar, você tem que armazená-lo em sessão do usuário e em cada postback causado pelo botão recuperá-la a partir da sessão e adicionar o item clicado pelo usuário.
Edit:. Aqui está uma pequena amostra de como você deve armazenar o ArrayList na sessão e recuperá-lo em cada postback
public partial class _Default : System.Web.UI.Page
{
ArrayList array;
protected void Page_Load(object sender, EventArgs e)
{
if(Session["array"] == null)
{
array = new ArrayList();
Session.Add("array", array);
}
else
array = Session["array"] as ArrayList;
GridView1.DataSource = array;
GridView1.DataBind(); //Edit 2
}
protected void Button1_Click(object sender, EventArgs e)
{
array.Add(DateTime.Now);
}
}
Se você ainda tiver dúvidas, deixe-me saber.
Outras dicas
Você só precisa armazenar esse ArrayList
na ViewState
ou Session
por isso vai manter os seus valores entre postbacks.