繁体   English   中英

Asp.net C#:仅显示一项的ListBox

[英]Asp.net c# : ListBox showing only one item

我有两个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();

}    

我根本不知道为什么我的清单仅显示我最后添加的一项。

这是因为在UpdateList方法中,您清除了列表,并从gigList中添加了元素,但是在每个Page_Load上,gigList变成了新列表,而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;
        }

    }

在Page_Load中,将新的GigList初始化为gigList变量。 在AddGig中,向其添加新的GigOpportunity。

然后在UpdateList中,清除lstGigs,然后将gigList中的内容添加到其中。 gigList中只有一项,您刚刚添加的一项。 这就是您只看到最后一个项目的原因。

lstGigs在哪里以及如何初始化? 在尝试添加新项目之前,应先从某种存储设备中填充它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM