TreeView - 保存对数据库表的更改

时间:2013-01-02 19:01:46

标签: c# winforms treeview

我有一个C#winforms应用程序表单,上面有TreeView。使用来自数据库的存储过程和视图(而不是表)来填充TreeView

这可以正常工作,因为它将信息作为所有根节点放入TreeView。我可以向TreeView的用户拖放,以便他们可以移动节点并拥有parent/child/grandchild/等。但是,需要很多。这也很好。

我正在努力(更像是感到沮丧)将用户的TreeView更改保存回数据库表。我考虑过每次移动进行更改,但决定在完成所有操作后使用按钮单击事件。

我提供的代码到目前为止。请记住,这不是click事件的最终外观,因为按钮未命名,还需要一些其他清理,sqlUpdate实际上将成为存储过程。

sqlUpdate中列出了2个参数; @parentid@industryid。如果我要使用数字(例如:1和4)对其进行硬编码,则更新将起作用,并使表中的更改成为正确的行业ID。当填充TreeView时,它使用表中的三(3)个字段; IndustryIDParentIDIndustryItem。这些进入数据表和TreeView

我感到沮丧的是获得@parentid@industryid这就是我在这里寻求帮助的原因。我已经多次更新,删除,插入,但由于某种原因,这使得绘制空白。

我确实意识到我需要在代码中指定参数,但我认为这就是问题所在。这是2行;

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

这是点击处理程序:

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();
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这是一种方法:

对于@industryid,请在数据库中使用自动递增的id列。填充树视图时,将该值分配给树视图节点标记。然后使用treeview.parent.tag的值为@parentid。