如何删除ASP.NET列表视图中的项目并保留数据源?

时间:2010-04-27 17:05:04

标签: asp.net data-binding listview

我有一个绑定到Listview的对象集合,如下所示:

   if (!IsPostBack)
        {
            List<Equipment> persons = new List<Equipment>
                             {new Equipment{ItemName = "Sworn", ItemCount = 7, ItemCost = 255},
                              new Equipment{ItemName = "Civ", ItemCount = 3, ItemCost = 80},
                              new Equipment{ItemName = "Civ", ItemCount = 5, ItemCost = 200}};

            lvMain.DataSource = persons;

            BindList();
        }

我想在此对象集合中添加/更新/删除,并在用户保存时将最终数据对象集合提交给BL ...而不是每次更改行时删除/添加/更新。

所以我的问题是如何维护该数据源的状态?我试过这个(删除示例)

  protected void lvMain_ItemCommand(object sender, ListViewCommandEventArgs e)
    {
        switch (e.CommandName)
        {
            case "Delete":
                {
                    ListViewDataItem lvdi = (ListViewDataItem)e.Item;
                    lvMain.Items.Remove(lvdi);                
                    break;
                }

但它什么都没做。我无法将其重新绑定到datasrouce,因为此时数据源为null ..我假设listview保持自己的包含数据的视图状态?...我猜更糟糕的是我总是可以在会话中保存对象集合对象.. ..

我做错了什么或想错了路?

1 个答案:

答案 0 :(得分:0)

我的建议是将人员存储在Viewstate中,然后添加/编辑/删除。

在Viewstate中存储

ViewState["Persons"] = persons;

退出Viewstate

List<Equipment> persons = (List<Equipment>)ViewState["Persons"];

...对对象执行添加/编辑/删除,然后将其存储回Viewstate