我有一个 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();
}
}
}
}