使用C#Class多次填充listview

时间:2016-11-15 17:21:06

标签: c# listview

每次选择按钮时,我都会尝试填充listview。目前我每次都有一个按钮填充listview一次。每次输入新值时,它都会覆盖当前的listview

我希望能够添加新项目并继续直到有多行。

protected void btnAddSkuBarcode_Click(object sender, EventArgs e)
{
    var SKUS = new List<SkuBar>
    {
        new SkuBar {SkuBarcode = txtSkuBarcode.Text , Qty = txtQty.Text},
    };

    lvWebLabels.DataSource = SKUS;
    lvWebLabels.DataBind();
}

public class SkuBar
{
    public string SkuBarcode { get; set; }
    public string Qty { get; set; }
}

2 个答案:

答案 0 :(得分:2)

目前,每次点击按钮时,您都会创建一个新变量(SKUS)。当您绑定到该新列表时,您将丢失先前绑定到该控件的任何内容。

由于列表需要保留在比方法更大的范围内,所以将它放在类范围内:

List<SkuBar> SKUS = new List<SkuBar>();

然后只需添加到现有列表中:

protected void btnAddSkuBarcode_Click(object sender, EventArgs e)
{
    SKUS.Add(new SkuBar {SkuBarcode = txtSkuBarcode.Text , Qty = txtQty.Text});

    lvWebLabels.DataSource = SKUS;
    lvWebLabels.DataBind();
}

请注意,这只适用于有状态系统。如果您正在使用WebForms,那么对象本身也会从每个请求的范围中删除,因此您需要将数据保留在其他位置。会话状态,数据库等

答案 1 :(得分:0)

每次点击该按钮时,您都会创建一个新的List<T>,这样您就会丢失之前的按钮。定义按钮外部的List<T>,以便可以重复使用:

namespace YourNamespace
{
    public class YourClass
    {
        List<SkuBar> SKUS;

        public YourClass() // Or form load or whatever
        {
            SKUS = new List<SkuBar>();
        }

        protected void btnAddSkuBarcode_Click(object sender, EventArgs e)
        {
            SKUS.Add(new SkuBar {SkuBarcode = txtSkuBarcode.Text , Qty = txtQty.Text});

            lvWebLabels.DataSource = SKUS;
            lvWebLabels.DataBind();
        }
    }
}