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.
输入回发,错误就消失了。不知道这是不是一条正确的路。请告诉我如何正确地做这件事。
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