c#实体,从下拉列表中删除db记录的选定值

本文关键字:记录 db 删除 实体 下拉列表 | 更新日期: 2023-09-27 18:13:12

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

我已经从数据库中填充了下拉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.

输入回发,错误就消失了。不知道这是不是一条正确的路。请告诉我如何正确地做这件事。

c#实体,从下拉列表中删除db记录的选定值

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

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

我不知道daoTask是什么,也不知道你是如何在代码中持久化的,但是从DB中删除对象的方式听起来不正确…您正在创建一个新的,并分配它一个不同的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而不是名称找到任务。

删除该任务并fine。但是您需要将数据重新绑定到控件dropListTask以使UI中的更改生效。

    you can call **protected void dropTask()** for rebind dropdown value after delete