2013-10-09 14 views
0

我有一個關於在我的數據庫表中交換幾個值的問題。在datagridview/w數據集中從數據庫交換值

我要構建的是一個顯示調查的網站(在ASP.net中)。這些問題將存儲在名爲SURVEY_QUESTIONS(SQL Server中)的表中。

該表具有下述列:

  • survey_question_id(INT)
  • 問題(字符串)
  • 類型(字符串)
  • 活性(布爾)
  • 順序(INT)

現在,一個問題將被存儲在問題欄中,爲前充足:

您是否滿意現狀?

該類型將是一個多項選擇或一個開放的列。主動意味着如果它活躍,那麼只有在調查中才會顯示該問題。我有的問題是最後一列,order。我想從最低到最高排列問題。所以如果我有5個問題,它們將根據訂單欄1,2,3,4,5很好地排序。

我有一個C#(Winforms)應用程序,我添加問題並編輯它們。我在datagridview中執行此操作,並使用數據集填充網格視圖。例如,當我按下保存按鈕時,datagridview中的更改將更新到我的數據庫。

現在讓我們說問題一有訂單編號3,問題五有訂單編號1.我想問題一是顯示的第一個問題,意思是它的訂單編號應該是1.但在這種情況下,問題五已經有了那個訂單號碼,我想要的是每當一個「佔用」訂單號碼被分配給另一個問題時,它們的訂單號碼就會交換。

我有保存按鈕後面的下面的代碼更新到數據庫:

DialogResult dr = MessageBox.Show("Are you sure want to edit a question?", "Message", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information); 

if (dr == DialogResult.Yes) 
{ 
    this.SURVEY_QUESTIONTableAdapter.Update(_PVB1314_005DataSet.SURVEY_QUESTION); 
    datagridviewTest.Refresh(); 
    MessageBox.Show("Database updated"); 
} 

我希望有人能幫助我在這一個,在此先感謝。

回答

0

您需要開始使用存儲過程。在您的代碼中,您有一個顯示「數據庫已更新」的消息框。你如何知道數據庫已經更新?你甚至還沒有在try catch塊中獲得代碼。

編寫一個存儲過程,其中包含要更新的QuestionID的輸入參數以及要更新到的OrderID的輸入參數。然後,您可以輕鬆測試所需的OrderID是否已被使用,如果沒有,則運行更新語句。

如果它正在使用中,並且您的訂單欄不允許重複的值,則可能需要臨時將其OrderID所在的行與臨時值(可能爲-1)一起存儲行的當前OrderID你想在一個變量中進行更改,使用正確的OrderID更新要更改OrderID的行,然後使用您臨時存儲的OrderID更新OrderID剛剛更改爲-1的行。