Asp.net c#:ListBox只显示一个项目
本文关键字:一个 项目 显示 net ListBox Asp | 更新日期: 2023-09-27 18:01:11
我有一个带有两个web表单的程序。我通过从一个网络表单中获取数据
public GigOpportunity GetData()
{
//Get written data from text boxes from this web form to the other
return new GigOpportunity(txtBoxID.Text, Calendar1.SelectedDate.Date,
TextBoxVenue.Text, TextBoxGenre.Text, Convert.ToDouble(TextBoxCost.Text),
Convert.ToInt32(TextBoxCapacity.Text), CheckHeadLiner.Checked,
TextBoxMainAct.Text, CheckEngineer.Checked);
}
public void ButtonOk_Click(object sender, EventArgs e)
{
// First part: Saves info on first page.
Session.Add("Gig", GetData());
// First part: Saves info on first page.
GigManagerWebForm.add = true;
Server.Transfer("~/GigManagerWebForm.aspx");
}
我通过这个把它转换成另一种形式,
private void Page_Load(object sender, EventArgs e)
{
gigList = new GigList();
AddGig();
}
private void UpdateList()
{
lstGigs.Items.Clear();
for (int i = 0; i < gigList.Count(); i++)
{
lstGigs.Items.Add(Convert.ToString(gigList.getGig(i)));
}
}
public void AddGig()
{
if (add == true)
{
//Reads info into variables on the second page.
GigOpportunity getData = (GigOpportunity)(Session["Gig"]);
gigList.addGig(getData);
add = false;
//Create new session ID
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
}
UpdateList();
}
我根本不知道为什么我的列表只显示了我最后添加的一项。
在Page_Load中,您将一个新的GigList初始化为GigList变量。在AddGig中,您添加了一个新的GigOpportunity。
然后在UpdateList中,清除lstGigs,并将gigList中的任何内容添加到其中。gigList只有一个项目,那就是您刚刚添加的项目。这就是你只看到最后一件物品的原因。
lstGigs在哪里以及如何初始化?在尝试添加新项目之前,应该从某种存储中填充它。
这是因为在UpdateList方法中,您清除了列表,并从gigList中添加了元素,但在每个Page_Load gigList上都会变成新的list,addGig只向其中添加一个项目。为了解决这个问题,您可能不应该在添加新元素之前清除ListBox。或者,您可能希望将整个列表(而不仅仅是上次添加的元素(存储在会话中。您还可以将该列表保存到ViewState。
我在应用程序上尝试了以下简化代码,结果成功了:
public void ButtonOk_Click(object sender, EventArgs e)
{
// First part: Saves info on first page.
if (Session["Gig"] == null)
{
Session.Add("Gig", new List<string>());
}
List<string> list = (List<string>)Session["Gig"];
list.Add("new Data");
Session["Gig"] = list;
Server.Transfer("~/GigManagerWebForm.aspx");
}
// On the GigManagerWebForm.aspx
private void Page_Load(object sender, EventArgs e)
{
AddGig();
}
public void AddGig()
{
if(Session["Gig"] != null)
{
//Reads info into variables on the second page.
List<string> getData = (List<string>)(Session["Gig"]);
ListBox1.Items.AddRange(getData.Select(d => new ListItem(d)).ToArray());
Session["Gig"] = getData;
}
}