2013-01-02 29 views
0

我有一個C#winforms應用程序窗體,上面有一個TreeView。填充TreeView是使用數據庫中存儲的proc和view(不是表)完成的。TreeView - 將更改保存到數據庫表

這可以正常工作,因爲它將信息放入TreeView作爲所有根節點。我已經爲用戶提供了TreeView的拖放功能,因此他們可以移動節點並擁有parent/child/grandchild/等。但是,需要很多。這也很好。

我在掙扎着(更像是沮喪),將用戶的TreeView更改保存回數據庫表。我考慮在每次移動時進行更改,但在完成所有移動操作後,決定使用按鈕單擊事件。

我正在提供我目前使用的代碼。請記住,這不是單擊事件的最終外觀,因爲未命名按鈕以及一些其他需要的清理,sqlUpdate實際上將成爲存儲過程。

sqlUpdate中列出了2個參數; @parentid@industryid。如果我用一個數字(例如:1和4)對這些數據進行硬編碼,則更新將起作用,並將表中的更改更改爲正確的行業ID。當填充TreeView時,它使用表中的三(3)個字段; IndustryIDParentIDIndustryItem。這些進入數據表和TreeView

我感到沮喪的是得到@parentid@industryid這就是爲什麼我張貼在這裏尋求幫助。我做了更新,刪除,插入多次,但由於某種原因,這使得繪製一個空白。

我知道我需要在代碼中指定參數,但我認爲這是問題所在。這是兩條線;

command.Parameters.AddWithValue("@parentid", ?????); 
command.Parameters.AddWithValue("@industryid", ?????); 

這裏是click處理程序:

private void button6_Click(object sender, EventArgs e) 
{ 
    using (SqlConnection conn = new SqlConnection(connStr)) 
    { 
     SqlCommand command = new SqlCommand(); 
     { 
      string sqlUpdate = "UPDATE tblIndustry SET IndustryItemParentID = @parentid WHERE IndustryID = @industryid"; 

      try 
      { 
       conn.Open(); 
       command.Connection = conn; 

       command.CommandType = CommandType.Text; 
       command.CommandText = sqlUpdate; 
       command.ExecuteNonQuery(); 

       MessageBox.Show("Done"); 
      } 

      catch (Exception ex) 
      { 
       MessageBox.Show("There is an error." + '\r' + '\n' + '\r' + '\n' + ex.ToString(), "NOTICE", MessageBoxButtons.OK); 
      } 

      finally 
      { 
       conn.Close(); 
      } 
     } 
    } 
} 

回答

0

下面是做這件事:

對於@industryid,在數據庫中使用的自動遞增的ID列。填充樹視圖時,將該值分配給樹視圖節點標記。然後使用@parentid的treeview.parent.tag的值。

+0

謝謝你的回覆。你有一個例子嗎?這裏是填充treeview的代碼。 – John

+0

無需迴應。我已經改變了信息的顯示方式。已經花費太多時間了。 – John

相關問題