0

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

这很好用,因为它将信息TreeView作为所有根节点放入。我为用户提供了拖放功能,TreeView因此他们可以移动节点并拥有parent/child/grandchild/等。但是,需要很多。这也很好用。

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

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

sqlUpdate列出了 2 个参数;@parentid@industryid。如果我要使用数字(例如:1 和 4)对它们进行硬编码,则更新将起作用并将表中的更改更改为正确的行业 ID。TreeView填充后,它使用表中的三 (3) 个字段;IndustryID, ParentID, IndustryItem. 这些进入数据表和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();
            }
        }
    }
}
4

1 回答 1

0

这是一种方法:

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

于 2013-01-03T16:32:57.783 回答