c#entity,从下拉列表中选择值删除db记录

时间:2013-05-13 08:49:07

标签: c# asp.net postback viewstate

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

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

所以我放入了回发,错误就消失了。不知道这是不是正确的方法。请告诉我如何正确地做到这一点。

提前致谢。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

我相信错误消失了,因为您确实没有在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();

谷歌搜索你得到的错误应该指出你正确的方向,问题是数据库代码,而不是ASP回发:The object cannot be deleted because it was not found in the ObjectStateManager

<强>更新

根据评论你应该这样做:

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

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

答案 2 :(得分:0)

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