2016-11-15 66 views
0

我试图在每次选择一个按钮时填充listview。目前我每次都有按钮填充listview一次。每次输入新值时,它都会覆盖当前的listview使用C#类型多次填充列表视图

我想能够添加一个新项目并继续,直到有多行。

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

目前正在创建一个新的变量(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,那么对象本身也会从每个请求的范围中删除,因此您需要将数据保存在其他地方。会话状态,数据库等

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(); 
     } 
    } 
}