我有一个C#winforms应用程序表单,上面有TreeView
。使用来自数据库的存储过程和视图(而不是表)来填充TreeView
。
这可以正常工作,因为它将信息作为所有根节点放入TreeView
。我可以向TreeView
的用户拖放,以便他们可以移动节点并拥有parent/child/grandchild/
等。但是,需要很多。这也很好。
我正在努力(更像是感到沮丧)将用户的TreeView
更改保存回数据库表。我考虑过每次移动进行更改,但决定在完成所有操作后使用按钮单击事件。
我提供的代码到目前为止。请记住,这不是click事件的最终外观,因为按钮未命名,还需要一些其他清理,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();
}
}
}
}
答案 0 :(得分:0)
这是一种方法:
对于@industryid,请在数据库中使用自动递增的id列。填充树视图时,将该值分配给树视图节点标记。然后使用treeview.parent.tag的值为@parentid。