2013-01-02 28 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

相关问题