关于treeview的应用

jerysab 2011-05-09 03:10:08
现在在winform中用treeview,有2个按钮,点击第一个按钮可以新增一个 父节点。点击另一个按钮可以新增到子节点。代码如何写??高手帮帮忙
...全文
78 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Daqing 2011-05-09
  • 打赏
  • 举报
回复
以上是核心代码,自己写的简单实例,你看看。
Daqing 2011-05-09
  • 打赏
  • 举报
回复
  #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
jerysab 2011-05-09
  • 打赏
  • 举报
回复
有没有例子哦,给个例子看看。 我就像如何我想添加父节点就添加父节点,想添加子节点就添加子节点。这样的列子。在winform中如何写呢
Daqing 2011-05-09
  • 打赏
  • 举报
回复
              
TreeNode tn = new TreeNode(“新节点”);
tn.Tag = newzb;
treeview1.SelectedNode.Nodes.Add(tn);
就ok了
cjh200102 2011-05-09
  • 打赏
  • 举报
回复
去51aspx下载代码
xuexiaodong2009 2011-05-09
  • 打赏
  • 举报
回复
Node node=new Node ()
tree.nodes.add(node)//父节点
Node nodeChild=new Node ()
node.nodeS.add(nodeChild)//子节点

110,526

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧