如题,TreeView绑定数据库后增加节点,如何判断是根节点还是子节点还是下下一级节点,删除.修改,都实现了,就差个新增,我用的右键菜单, 新增节点分增加同级和下级 ,增加后怎么在数据库中也添加上 不会了,请教各位大神.
数据库表结构:
ID(自增) Context(所有的节点名) ParentID(父ID)
现在就是怎么判断增加的是同级节点还是下级节点,讲个方法就好,最好给点代码,tag用的不是很熟练,搞不定.
还有一个问题就是 增加.删除.修改后 treeview的刷新,我是用的重新绑定一次数据库,有没有其他的办法实现动态刷新, treeView1.Refresh()不好使啊. 刚研究TreeView 不是很懂~ 无法一两句说明请注明一个联系方式,小弟我在此恭候!!
数据库表结构:
ID(自增) Context(所有的节点名) ParentID(父ID)
现在就是怎么判断增加的是同级节点还是下级节点,讲个方法就好,最好给点代码,tag用的不是很熟练,搞不定.
还有一个问题就是 增加.删除.修改后 treeview的刷新,我是用的重新绑定一次数据库,有没有其他的办法实现动态刷新, treeView1.Refresh()不好使啊. 刚研究TreeView 不是很懂~ 无法一两句说明请注明一个联系方式,小弟我在此恭候!!
找父节点 tree.SelectedNode.Parent.Tag.ToString();
SqlCommand cmd = new SqlCommand("insert into tbtree(Context,ParentID) values('" + textBox1.Text + "','" + Node.Tag.ToString() + "')", conn);
cmd.ExecuteNonQuery();
新增子级 依旧在数据库中加的同级节点 一样的代码还不行? 他们节点的tag不一样啊
反正你tag保存你的id就是了,根据id一层一层实现你的父子关系这样
如果你不知道TreeView的深度,那你只能听我的。
//你结构很简单 你用
TreeNode node = new TreeNode();
node.Text = "名称";
node.Tag = "上级id,没上级放NULL";
node.Name = "id";
//新增节点时如果是统计节点你就拿node.Tag
//是下级节点拿node.name 这样就行了吗
//或是node.Text = "名称"; node.Tag = "id";
//新增节点时如果是统计节点你就拿node.Parent.Tag(这里要注意加判断 没上级节点的情况)
//是下级节点拿node.tag 这样就行了吗
tag保存id? 我保存的Pid 只有在Pid中才体现层次关系啊 我不知道怎么利用节点的tag绑定 id的自增 实现层次
会返回你insert into后生成的递增id值
如果 tag取 ParentID的值,新增同级 会生成下级节点 这很郁闷 ~ 该怎么办呢
SqlCommand cmd = new SqlCommand("insert into tbtree(Context,ParentID) values('" + textBox1.Text + "','" + treeView1.SelectedNode.Tag.ToString() + "')", conn);
新增下级:
SqlCommand cmd = new SqlCommand("insert into tbtree(Context,ParentID) values('" + textBox1.Text + "','" + treeView1.SelectedNode.Parent.Tag.ToString() + "')", conn);这是tag取ID的时候,就是这样 新增下级节点一点问题没有, 如果新增同级的话 也会归到下级节点中
void GetTreeViewNode(DataTable dt, TreeNodeCollection tnc)
{
foreach (DataRow dr in dt.Rows)
{
TreeNode tn = new TreeNode();
tn.Text = dr["managetitle"].ToString();
tn.Value = dr["manageid"].ToString();
tn.NavigateUrl =Convert.ToString(dr["url"]);
tnc.Add(tn);
tn.PopulateOnDemand = ((int)(dr["account"]) > 0);
}
}TreeView的 TreeView1_TreeNodePopulate 事件:
SqlConnection conn = new SqlConnection("server=.;database=news;uid=sa;pwd=123;");
string strsql = "select manageid,managetitle,managepower,url,(select count(*) from manage where managepower=a.manageid) account from manage a where managepower=@pid";
SqlDataAdapter sda = new SqlDataAdapter(strsql, conn);
sda.SelectCommand.Parameters.Add("@pid", SqlDbType.Int);
sda.SelectCommand.Parameters["@pid"].Value = e.Node.Value;
DataSet ds = new DataSet();
sda.Fill(ds, "table");
GetTreeViewNode(ds.Tables["table"], e.Node.ChildNodes);
把字段换下就可以了
private void treeView_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
{
DoDragDrop(e.Item, DragDropEffects.Move);
}
private void treeView_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
private void treeView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
TreeNode NewNode;
if(e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
{
Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
TreeNode DestinationNode = ((TreeView)sender).GetNodeAt(pt);
NewNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
if(DestinationNode.TreeView != NewNode.TreeView)
{
DestinationNode.Nodes.Add((TreeNode) NewNode.Clone());
DestinationNode.Expand();
}
}
}
参考