2013-05-13 41 views
0

如何從下拉列表中選擇值刪除記錄?c#實體,從下拉列表中刪除db記錄選定的值

我已經從數據庫填入了下拉list,我有問題可以使用刪除按鈕將其刪除。我正確的做法嗎? (很抱歉,如果我的代碼是凌亂)

這是我如何填充我的下拉列表:

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

     dropListTask.DataBind(); 
    } 

這是刪除按鈕:

我需要回發添加到btn代碼,如果我刪除它會給我一個錯誤,說:

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

所以我把在回傳和錯誤消失。不知道這是否正確。請告訴我如何正確地做到這一點。

在此先感謝。

回答

0

這個:if (!Page.IsPostBack)意味着這段代碼只會在頁面的第一次運行時運行(所以不是當你點擊按鈕時)。 按鈕點擊將返回到您的ASP頁面作爲回發,所以最終您應該反轉if,但在btnDelete_Click方法,你已經知道是一個回發,所以你可以跳過如果完全。

我相信錯誤消失了,因爲實際上,您並未執行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回發:The object cannot be deleted because it was not found in the ObjectStateManager

UPDATE

基於你應該做這樣的事情的評論:

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

順便說一句,我就一個GetTask(int id)方法添加到您的daoTask類能夠找到ID任務而不是名字。

+0

daoTask是一個類文件,我有我的CRUD代碼 – user2376998 2013-05-13 09:05:44

+0

好的,那麼你應該使用你的CRUD的R部分來檢索要刪除的任務...如果你使用的是實體框架,它可能看起來像'.FirstOrDefault(...)'。 – Tallmaris 2013-05-13 09:11:19

+0

我曾嘗試使用return context.tasks.FirstOrDefault(a => a.TaskName.Equals(name));在方法GetTask下的類文件中。 So del.TaskName = daoTask.GetTask(dropListTask.SelectedItem.Text).ToString(); 。試圖通過daoTask.Delete(del)刪除; ..仍然無法工作,請啓發我,並耐心與像我這樣的新手...... thx – user2376998 2013-05-13 09:24:17

0

它刪除任務並罰款。但是您需要將數據重新綁定到控件dropListTask以使UI中的更改生效。

+0

請賜教給我,感謝您的快速回復! – user2376998 2013-05-13 08:54:06

+0

順便說一句我檢查mySQL數據庫每次我嘗試刪除,記錄似乎在那裏,並沒有刪除。 – user2376998 2013-05-13 08:54:44

+0

如果記錄沒有從數據庫中刪除,我懷疑刪除daoTask的代碼。檢查是否有任何異常或使用數據庫分析器來確保查詢到達數據庫。更新UI你可以參考http://forums.asp.net/t/1795945.aspx/1 – 2013-05-13 09:02:43

0
you can call **protected void dropTask()** for rebind dropdown value after delete 
相關問題