【问题标题】:How to delete a Item in a ASP.NET listview and persist the datasource?如何删除 ASP.NET 列表视图中的项目并保留数据源?
【发布时间】:2010-04-27 17:05:03
【问题描述】:

我有一组对象,我像这样绑定到 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;
                }

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

我是在做错事还是以错误的方式思考?

【问题讨论】:

    标签: asp.net data-binding listview


    【解决方案1】:

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

    存储在视图状态中

    ViewState["Persons"] = persons;
    

    退出视图状态

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

    ...对对象执行添加/编辑/删除,然后存储回视图状态

    【讨论】:

    • 好吧..听起来不错..所以数据的集合不会自动存储在 ListView 中?
    • 它们是,所以只要不重新绑定 ListView,就可以从 ListView 添加/编辑/删除项目。假设 ListView 启用了视图状态。 (EnableViewState)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多