codeme
November 27th, 2008, 08:47 AM
Hello,
I need to code a project for school in c#, everything was going smoothly, till i tried to do the following:
I have an ArrayList of objects, I want to generate Buttons which, when i click it, deletes the corresponding item in the ArrayList, sounds pretty straight forward, right?
So I started coding, it didn't really went as smoothly as planned, so I started coding it seperately in a testproject, where it still didn't work... For some reason, the following code works, but only if i click the button twice, which obviously isn't the plan.
WebForm1.cs
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
namespace programmerenproject
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ArrayList list;
if (!IsPostBack)
{
list = new ArrayList();
list.Add("test1");
list.Add("test2");
list.Add("test3");
list.Add("test4");
ViewState["list"] = list;
generateButtons(list);
}
else
{
list = (ArrayList)ViewState["list"];
generateButtons(list);
}
}
private void ClickMe(object sender, System.EventArgs e)
{
ArrayList list = (ArrayList)ViewState["list"];
MyButton who = (MyButton)sender;
list.RemoveAt(who.Element);
lblTest.Text = list[who.Element].ToString();
generateButtons(list);
ViewState["list"] = list;
}
public void generateButtons(ArrayList l)
{
pnlTest.Controls.Clear();
int number = l.Count;
MyButton[] myButtons = new MyButton[number];
for (int i = 0; i < number; i++)
{
myButtons[i] = new MyButton(i);
myButtons[i].Text = l[i].ToString();
myButtons[i].Click += new System.EventHandler(this.ClickMe);
pnlTest.Controls.Add(myButtons[i]);
}
}
}
}
MyButton.cs (extends Button so I can add some extra data behind the button)
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections;
namespace programmerenproject
{
public class MyButton:Button
{
int element;
public int Element
{
get { return element; }
set { element = value; }
}
public MyButton(int e)
{
element = e;
}
}
}
WebForm1.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="programmerenproject.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Panel ID="pnlTest" runat="server">
</asp:Panel>
<asp:Label ID="lblTest" runat="server"></asp:Label>
<br />
</div>
</form>
</body>
</html>
I hope someone can point out my problem... or give me a pointer in the right direction :)
I need to code a project for school in c#, everything was going smoothly, till i tried to do the following:
I have an ArrayList of objects, I want to generate Buttons which, when i click it, deletes the corresponding item in the ArrayList, sounds pretty straight forward, right?
So I started coding, it didn't really went as smoothly as planned, so I started coding it seperately in a testproject, where it still didn't work... For some reason, the following code works, but only if i click the button twice, which obviously isn't the plan.
WebForm1.cs
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
namespace programmerenproject
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ArrayList list;
if (!IsPostBack)
{
list = new ArrayList();
list.Add("test1");
list.Add("test2");
list.Add("test3");
list.Add("test4");
ViewState["list"] = list;
generateButtons(list);
}
else
{
list = (ArrayList)ViewState["list"];
generateButtons(list);
}
}
private void ClickMe(object sender, System.EventArgs e)
{
ArrayList list = (ArrayList)ViewState["list"];
MyButton who = (MyButton)sender;
list.RemoveAt(who.Element);
lblTest.Text = list[who.Element].ToString();
generateButtons(list);
ViewState["list"] = list;
}
public void generateButtons(ArrayList l)
{
pnlTest.Controls.Clear();
int number = l.Count;
MyButton[] myButtons = new MyButton[number];
for (int i = 0; i < number; i++)
{
myButtons[i] = new MyButton(i);
myButtons[i].Text = l[i].ToString();
myButtons[i].Click += new System.EventHandler(this.ClickMe);
pnlTest.Controls.Add(myButtons[i]);
}
}
}
}
MyButton.cs (extends Button so I can add some extra data behind the button)
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections;
namespace programmerenproject
{
public class MyButton:Button
{
int element;
public int Element
{
get { return element; }
set { element = value; }
}
public MyButton(int e)
{
element = e;
}
}
}
WebForm1.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="programmerenproject.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Panel ID="pnlTest" runat="server">
</asp:Panel>
<asp:Label ID="lblTest" runat="server"></asp:Label>
<br />
</div>
</form>
</body>
</html>
I hope someone can point out my problem... or give me a pointer in the right direction :)