0

如何从下拉列表选定值中删除记录?

我已经从数据库中填充了下拉列表list,但使用删除按钮删除它时遇到问题。我做对了吗?(对不起,如果我的代码很乱)

这就是我填充下拉列表的方式:

protected void dropTask()
    {
        dropListTask.DataSource = daoTask.GetAll();
        dropListTask.DataTextField = "TaskName";
        dropListTask.DataValueField = "TaskID";

        dropListTask.DataBind();
    }

这是删除按钮:

  protected void btnDelete_Click(object sender, EventArgs e)
  {
        if (!Page.IsPostBack)
        { 
            Model.task del= new Model.task();
            del.TaskID = Convert.ToInt32(dropListTask.SelectedValue);
            daoTask.Delete(del);
            daoTask.Save();
        }
  }

我需要将回发添加到 btn 代码中,如果我删除它,它会给我一个错误提示;

The object cannot be deleted because it was not found in the ObjectStateManager.

所以我把回发和错误消失了。不知道是不是正确的方法。请告诉我如何以正确的方式进行操作。

提前致谢。

4

3 回答 3

0

这:if (!Page.IsPostBack)意味着这段代码只会在页面的第一次运行时运行(所以当你单击按钮时不会运行)。单击按钮将作为回发返回到您的 ASP 页面,因此最终您应该反转if,但是在btnDelete_Click您已经知道的方法中是回发,因此您可以完全跳过 if 。

我相信错误消失了,因为实际上,您没有执行if块中的代码,因此没有删除任何内容。

我不知道什么daoTask是或如何在代码中进行持久性,但从数据库中删除对象的这种方式听起来不正确......您正在创建一个新对象并为其分配不同的 ID,但流程应该不同:

先根据id找到已有的对象,然后删除:

// Don't know if 'Find' is the method you need, you should check based on what
// libraries you are using for saving/loading from DB
Model.task del = daoTask.Find(Convert.ToInt32(dropListTask.SelectedValue));
daoTask.Delete(del);
daoTask.Save();

谷歌搜索你得到的错误应该已经为你指出了正确的方向,即问题是 DB 代码,而不是 ASP 回发:无法删除对象,因为它在 ObjectStateManager 中找不到

更新

根据评论,您应该执行以下操作:

Model.task del = daoTask.GetTask(dropListTask.SelectedItem.Text);
daoTask.Delete(del);
daoTask.Save();

顺便说一句,我会GetTask(int id)在你的类中添加一个方法,daoTask以便能够通过 id 而不是名称来查找任务。

于 2013-05-13T09:03:58.113 回答
0

它删除任务和罚款。但是需要重新绑定数据到控件 dropListTask 才能使 UI 中的更改生效。

于 2013-05-13T08:52:52.567 回答
0
    you can call **protected void dropTask()** for rebind dropdown value after delete
于 2013-05-13T09:08:11.657 回答