关于treeview的应用 现在在winform中用treeview,有2个按钮,点击第一个按钮可以新增一个 父节点。点击另一个按钮可以新增到子节点。代码如何写??高手帮帮忙 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Node node=new Node ()tree.nodes.add(node)//父节点Node nodeChild=new Node ()node.nodeS.add(nodeChild)//子节点 TreeNode tn = new TreeNode(“新节点”);tn.Tag = newzb;treeview1.SelectedNode.Nodes.Add(tn);就ok了 有没有例子哦,给个例子看看。 我就像如何我想添加父节点就添加父节点,想添加子节点就添加子节点。这样的列子。在winform中如何写呢 #region treeview Event private void treeview_customer_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.F2) { cxmEdit(sender, e); } } /// <summary> /// 文本编辑完成之后,更新操作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void treeview_customer_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) { try { if (e.Label != null) { txt_CodeName.Text = e.Label.Trim(); UpdateNodeToDB(e.Node); } } catch (Exception exx) { BasicCheck.ShowError(exx.ToString()); } } private void treeview_customer_AfterSelect(object sender, TreeViewEventArgs e) { if (e.Node != null) { TreeNode node = treeview_customer.SelectedNode; ZBZone zb = (ZBZone)((ZBZone)node.Tag).Clone(); zb.CodeName = node.Text;//把名称更新到文本框 SetText(zb); } } //树结构右键时,显示右键菜单 private void treeview_customer_MouseUp(object sender, MouseEventArgs e) { switch (e.Button) { case MouseButtons.Right: Cmx_customer.Show(treeview_customer, new Point(e.X, e.Y)); return; default: break; } } /// <summary> /// 鼠标右键按下时 正确的获取node位置 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void treeview_customer_MouseDown(object sender, MouseEventArgs e) { SetSelectedNodeByPosition(treeview_customer, e.X, e.Y); if (treeview_customer.SelectedNode == null) { return; } if (e.Button == MouseButtons.Right) { return; } } public void SetSelectedNodeByPosition(TreeView tv, int mouseX, int mouseY) { TreeNode node = null; try { Point pt = new Point(mouseX, mouseY); tv.PointToClient(pt); node = tv.GetNodeAt(pt); tv.SelectedNode = node; if (node == null) return; if (!node.Bounds.Contains(pt)) { return; } } catch (Exception err) { BasicCheck.ShowError(err.Message); } return; } #endregion #region Inittree Insert Update Delete /// <summary> /// 构造父节点树 /// </summary> /// <param name="trc">树集合</param> /// <param name="lzb">实体集合</param> private void TreeViewLoad(TreeNodeCollection trc,List<ZBZone> lzb) { treeview_customer.Nodes.Clear(); foreach (ZBZone zb in lzb) { int icount = zb.ParentID.Split(',').Count(); if (icount == 2) { TreeNode tn = new TreeNode(zb.CodeName); tn.Tag = zb;//设置tag属性 tn.ImageIndex = 0; trc.Add(tn); treeview_customer.Nodes[0].ExpandAll(); } else { InitChildNode(trc[trc.Count - 1].Nodes,zb,zb.ParentID); } } } /// <summary> /// 递归构造子节点 /// </summary> /// <param name="trchild">父节点集合</param> /// <param name="strparent">parentid长度</param> /// <param name="name">节点名称</param> private void InitChildNode(TreeNodeCollection trchild, ZBZone zbz,string parentid) { string stemp = parentid; if (stemp.IndexOf(',') != 0) { stemp = stemp.Substring(0, stemp.LastIndexOf(',')); int icount = stemp.Split(',').Count(); if (icount ==2) { TreeNode tn1 = new TreeNode(zbz.CodeName); tn1.ImageIndex = 2; tn1.SelectedImageIndex = 2; tn1.Tag = zbz; trchild.Add(tn1); } else { InitChildNode(trchild[trchild.Count - 1].Nodes, zbz, stemp); } } } /// <summary> /// 新增树形节点 /// </summary> /// <param name="node">树形节点的父节点</param> private ZBZone InsertNewNodeToDB(TreeNode node,string NodeName) { ZBZone newzb = new ZBZone(); if (node != null) { TreeNode tn = new TreeNode(); ; string stemp = string.Empty; if (NodeName.CompareTo(BasicCheck.RootNode) == 0)//插入根节点 { newzb = (ZBZone)((ZBZone)treeview_customer.Nodes[treeview_customer.Nodes.Count - 1].Tag).Clone(); stemp = newzb.ParentID;//获取最大的跟深度标示 stemp = (Convert.ToInt32(stemp.Substring(0, stemp.IndexOf(','))) + 1).ToString();//每增加一个节点,数字自动加1 stemp = string.Concat(stemp, ",", stemp); newzb.CodeName = BasicCheck.RootNode; newzb.ParentID = stemp; newzb.CodeID = DBManagement.RowID; tn = new TreeNode(newzb.CodeName); tn.ImageIndex = 0; tn.Tag = newzb; treeview_customer.Nodes.Add(tn); return newzb; } else//插入子节点 { if (node.Nodes.Count != 0) { newzb = (ZBZone)((ZBZone)node.Nodes[node.Nodes.Count - 1].Tag).Clone(); stemp = newzb.ParentID; stemp = (Convert.ToInt32(stemp.Substring(stemp.LastIndexOf(',')+1,1))+1).ToString(); stemp = string.Concat(newzb.ParentID.Substring(0, newzb.ParentID.LastIndexOf(',') + 1), stemp); } else { newzb = (ZBZone)((ZBZone)node.Tag).Clone(); stemp = string.Concat(newzb.ParentID, ",", "1");//累加parentid深度 } newzb.CodeID = DBManagement.RowID; newzb.CodeName = BasicCheck.Title; newzb.ParentID = stemp; tn = new TreeNode(newzb.CodeName); tn.ImageIndex = 2; tn.SelectedImageIndex = 2; tn.Tag = newzb; node.Nodes.Add(tn); } treeview_customer.SelectedNode = tn; } return newzb; } /// <summary> /// 更新树形节点 /// </summary> /// <param name="node">选中的node节点 ///</param> /// <returns>更新条数</returns> private int UpdateNodeToDB(TreeNode node) { int icount = 0; if (node != null) { ZBZone zb = (ZBZone)((ZBZone)node.Tag).Clone(); icount= DBManagement.Update( GetText(2, zb.ParentID),zb.CodeID);//更新据库 } return icount; } /// <summary> /// 删除节点 /// </summary> /// <param name="node"></param> private int idelcount = 0; private void DeleteNodeToDB(TreeNode node) { TreeNode currentnode = new TreeNode(); currentnode=node; if (currentnode != null) { ZBZone zb = (ZBZone)((ZBZone)currentnode.Tag).Clone(); idelcount += DBManagement.Delete(zb.CodeID); } if (currentnode.Nodes.Count > 0) { for (int j = 0; j < currentnode.Nodes.Count; j++) { DeleteNodeToDB(currentnode.Nodes[j]); } } } // 查询节点 private TreeNode GetTreeviewNode(TreeNodeCollection nodesToSearch, string title) { TreeNode currNode = null; for (int i = 0; i < nodesToSearch.Count; i++) { currNode = nodesToSearch[i]; if (currNode.LastNode == null) { if (currNode.Text.CompareTo(title) == 0) { return currNode; } } else GetTreeviewNode(currNode.Nodes, currNode.Text); } return currNode; } #endregion DataSet中的多个DataTable怎样绑定到Gridview? 什么是“不安全的上下文” VS2005打包winform程序.并将SQL2005还原或附加..求高手没分.存技术. 怎么获取一个字符串或者单个字的首字母哇? 用了SharpZipLib控件在没有装visio studio 6.0的机器里运行不了 菜鸟提问:OCX报表中截取数据字符 关于属性页的难题! 求助?? 急、急、急!20分急求一简单问题的解答 如何获得一个event的handle列表? 在线求助 求教《求一身份证正则表达式,要求能验证省市,出生年月,地区,位数》
tree.nodes.add(node)//父节点
Node nodeChild=new Node ()
node.nodeS.add(nodeChild)//子节点
TreeNode tn = new TreeNode(“新节点”);
tn.Tag = newzb;
treeview1.SelectedNode.Nodes.Add(tn);就ok了
private void treeview_customer_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F2)
{
cxmEdit(sender, e);
}
} /// <summary>
/// 文本编辑完成之后,更新操作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void treeview_customer_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
{
try
{
if (e.Label != null)
{
txt_CodeName.Text = e.Label.Trim();
UpdateNodeToDB(e.Node);
}
}
catch (Exception exx)
{ BasicCheck.ShowError(exx.ToString()); }
} private void treeview_customer_AfterSelect(object sender, TreeViewEventArgs e)
{
if (e.Node != null)
{
TreeNode node = treeview_customer.SelectedNode;
ZBZone zb = (ZBZone)((ZBZone)node.Tag).Clone();
zb.CodeName = node.Text;//把名称更新到文本框
SetText(zb);
}
} //树结构右键时,显示右键菜单
private void treeview_customer_MouseUp(object sender, MouseEventArgs e)
{
switch (e.Button)
{
case MouseButtons.Right:
Cmx_customer.Show(treeview_customer, new Point(e.X, e.Y));
return;
default:
break;
}
}
/// <summary>
/// 鼠标右键按下时 正确的获取node位置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void treeview_customer_MouseDown(object sender, MouseEventArgs e)
{
SetSelectedNodeByPosition(treeview_customer, e.X, e.Y);
if (treeview_customer.SelectedNode == null) { return; }
if (e.Button == MouseButtons.Right) { return; } }
public void SetSelectedNodeByPosition(TreeView tv, int mouseX, int mouseY)
{
TreeNode node = null;
try
{
Point pt = new Point(mouseX, mouseY);
tv.PointToClient(pt);
node = tv.GetNodeAt(pt);
tv.SelectedNode = node;
if (node == null) return; if (!node.Bounds.Contains(pt)) { return; } }
catch (Exception err) { BasicCheck.ShowError(err.Message); }
return;
}
#endregion #region Inittree Insert Update Delete
/// <summary>
/// 构造父节点树
/// </summary>
/// <param name="trc">树集合</param>
/// <param name="lzb">实体集合</param>
private void TreeViewLoad(TreeNodeCollection trc,List<ZBZone> lzb)
{
treeview_customer.Nodes.Clear();
foreach (ZBZone zb in lzb)
{
int icount = zb.ParentID.Split(',').Count();
if (icount == 2)
{
TreeNode tn = new TreeNode(zb.CodeName);
tn.Tag = zb;//设置tag属性
tn.ImageIndex = 0;
trc.Add(tn);
treeview_customer.Nodes[0].ExpandAll();
}
else
{
InitChildNode(trc[trc.Count - 1].Nodes,zb,zb.ParentID);
}
}
}
/// <summary>
/// 递归构造子节点
/// </summary>
/// <param name="trchild">父节点集合</param>
/// <param name="strparent">parentid长度</param>
/// <param name="name">节点名称</param>
private void InitChildNode(TreeNodeCollection trchild, ZBZone zbz,string parentid)
{
string stemp = parentid;
if (stemp.IndexOf(',') != 0)
{
stemp = stemp.Substring(0, stemp.LastIndexOf(','));
int icount = stemp.Split(',').Count();
if (icount ==2)
{
TreeNode tn1 = new TreeNode(zbz.CodeName);
tn1.ImageIndex = 2;
tn1.SelectedImageIndex = 2;
tn1.Tag = zbz;
trchild.Add(tn1);
}
else
{
InitChildNode(trchild[trchild.Count - 1].Nodes, zbz, stemp);
}
}
}
/// <summary>
/// 新增树形节点
/// </summary>
/// <param name="node">树形节点的父节点</param>
private ZBZone InsertNewNodeToDB(TreeNode node,string NodeName)
{
ZBZone newzb = new ZBZone();
if (node != null)
{
TreeNode tn = new TreeNode(); ;
string stemp = string.Empty;
if (NodeName.CompareTo(BasicCheck.RootNode) == 0)//插入根节点
{ newzb = (ZBZone)((ZBZone)treeview_customer.Nodes[treeview_customer.Nodes.Count - 1].Tag).Clone(); stemp = newzb.ParentID;//获取最大的跟深度标示
stemp = (Convert.ToInt32(stemp.Substring(0, stemp.IndexOf(','))) + 1).ToString();//每增加一个节点,数字自动加1
stemp = string.Concat(stemp, ",", stemp);
newzb.CodeName = BasicCheck.RootNode;
newzb.ParentID = stemp;
newzb.CodeID = DBManagement.RowID; tn = new TreeNode(newzb.CodeName);
tn.ImageIndex = 0;
tn.Tag = newzb; treeview_customer.Nodes.Add(tn);
return newzb;
}
else//插入子节点
{
if (node.Nodes.Count != 0)
{
newzb = (ZBZone)((ZBZone)node.Nodes[node.Nodes.Count - 1].Tag).Clone();
stemp = newzb.ParentID;
stemp = (Convert.ToInt32(stemp.Substring(stemp.LastIndexOf(',')+1,1))+1).ToString();
stemp = string.Concat(newzb.ParentID.Substring(0, newzb.ParentID.LastIndexOf(',') + 1), stemp);
}
else
{
newzb = (ZBZone)((ZBZone)node.Tag).Clone();
stemp = string.Concat(newzb.ParentID, ",", "1");//累加parentid深度
}
newzb.CodeID = DBManagement.RowID;
newzb.CodeName = BasicCheck.Title;
newzb.ParentID = stemp;
tn = new TreeNode(newzb.CodeName);
tn.ImageIndex = 2;
tn.SelectedImageIndex = 2;
tn.Tag = newzb;
node.Nodes.Add(tn);
}
treeview_customer.SelectedNode = tn;
}
return newzb;
} /// <summary>
/// 更新树形节点
/// </summary>
/// <param name="node">选中的node节点
///</param>
/// <returns>更新条数</returns>
private int UpdateNodeToDB(TreeNode node)
{
int icount = 0;
if (node != null)
{
ZBZone zb = (ZBZone)((ZBZone)node.Tag).Clone();
icount= DBManagement.Update( GetText(2, zb.ParentID),zb.CodeID);//更新据库
}
return icount;
}
/// <summary>
/// 删除节点
/// </summary>
/// <param name="node"></param>
private int idelcount = 0;
private void DeleteNodeToDB(TreeNode node)
{
TreeNode currentnode = new TreeNode();
currentnode=node;
if (currentnode != null)
{
ZBZone zb = (ZBZone)((ZBZone)currentnode.Tag).Clone();
idelcount += DBManagement.Delete(zb.CodeID);
}
if (currentnode.Nodes.Count > 0)
{
for (int j = 0; j < currentnode.Nodes.Count; j++)
{
DeleteNodeToDB(currentnode.Nodes[j]);
}
}
}
// 查询节点
private TreeNode GetTreeviewNode(TreeNodeCollection nodesToSearch, string title)
{
TreeNode currNode = null;
for (int i = 0; i < nodesToSearch.Count; i++)
{
currNode = nodesToSearch[i];
if (currNode.LastNode == null)
{
if (currNode.Text.CompareTo(title) == 0)
{
return currNode;
}
}
else
GetTreeviewNode(currNode.Nodes, currNode.Text);
}
return currNode;
}
#endregion