CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

请教高人关于treeview的问题!

楼主jluhappyman(小子)2005-04-01 10:45:35 在 .NET技术 / C# 提问

 
  我设计的treeview控件是带有复选框的,想编写一段C#程序,如果选中了某个子节点,则选中该子节点的所有父节点,如果选中了父节点,则选中该父节点的所有子节点,应该如何做,怎么老是出错啊。  
  谢谢! 问题点数:20、回复次数:8Top

1 楼sunnydde(dde)回复于 2005-04-01 11:42:44 得分 8

第一个问题  
  private   void   treeView1_AfterCheck(object   sender,   System.Windows.Forms.TreeViewEventArgs   e)  
  {  
  if(treeView1.SelectedNode.Checked)  
  setnodechecked(treeView1.SelectedNode);  
  }  
  private   void   setnodechecked(TreeNode   myNode)  
  {  
  if(myNode.Parent!=null)  
  {  
  myNode.Parent.Checked=true;  
  setnodechecked(myNode.Parent);  
  }  
  }  
  Top

2 楼sunnydde(dde)回复于 2005-04-01 12:07:24 得分 0

第二个  
  private   void   setchildNode(TreeNode   mytn)  
  {  
  foreach(TreeNode   tn   in   mytn.Nodes   )  
  {  
  tn.Checked=true;  
  if   (tn.Nodes.Count>0)  
  {  
  setchildNode(tn);  
  }  
  }  
  }  
  private   void   treeView1_AfterSelect(object   sender,   System.Windows.Forms.TreeViewEventArgs   e)  
  {  
  if(treeView1.SelectedNode.Checked)  
  {  
   
  setchildNode(treeView1.SelectedNode);  
  }Top

3 楼yidishui1570(一滴水)回复于 2005-04-02 02:06:40 得分 2

upTop

4 楼jluhappyman(小子)回复于 2005-04-04 13:06:03 得分 0

不行啊,我想要同时的,就是说如果点选的那个NODE已经处于选中状态了,则取消选中状态,并且如果有子结点则子结点也都取消选中,如果那个NODE没有选中,则选中那个NODE并且如果有上层结点则也选中,如果有子结点也选中子结点,按上面那么做会是死循环。麻烦高手在看看,指教下,谢谢!Top

5 楼sunnydde(dde)回复于 2005-04-04 18:47:47 得分 0

private   void   treeView1_BeforeCheck(object   sender,   System.Windows.Forms.TreeViewCancelEventArgs   e)  
  {  
  if(e.Action==TreeViewAction.ByMouse)  
  {  
  if(e.Node.Checked==false)  
  {  
  SetChildNode(e.Node,true);  
  SetParentNode(e.Node,true);  
  }  
  else  
  {  
  SetChildNode(e.Node,false);  
  SetParentNode(e.Node,false);  
  }  
  }  
   
  }  
  private   void   SetParentNode(TreeNode   tn   ,bool   check)  
  {  
  if(tn.Parent!=null)  
  {  
  tn.Parent.Checked=check;  
  SetParentNode(tn.Parent,check);  
  }  
  }  
  private   void   SetChildNode(TreeNode   tn   ,bool   check)  
  {  
  foreach(TreeNode   mytn   in   tn.Nodes)  
  {  
  mytn.Checked=check;  
  if(mytn.Nodes.Count>0)  
  {  
  SetChildNode(mytn,check);  
  }  
  }  
   
  }Top

6 楼sunnydde(dde)回复于 2005-04-04 18:49:24 得分 2

你是想写在select事件里还是check事件里?上面我是写在check里面的。 .Top

7 楼lovvver(ElephantTalk.Bright)回复于 2005-04-04 19:04:41 得分 8

//find   two   dealerid   is   whether   in   one   lineal   family.  
  private   int   ChkLineal(string   DealerId   ,string   DEALERID)  
  {  
  //if   DealerId   equals   DEALERID(node)  
  if   (DealerId.ToString   ()   ==   DEALERID.ToString   ())  
  return   0;  
  //if   DealerId   is   the   parent(grand...)   of   the   DEALERID  
  if   (ChkPC(DealerId,DEALERID))  
  return   -1;  
  //if   DealerId   is   the   son(grand...)   of   the   DEALERID  
  if   (ChkPC(DEALERID,DealerId))  
  return   1;  
  return   -2;  
  }  
   
  //check   the   childid   is   whether   the   child   of   the   parentid   or   not.  
  private   bool   ChkPC(string   parentid,string   childid)  
  {  
  bool   iResult   =   false;  
  string   strExpr   =   "   parent_id   =   "+parentid;  
  DataRow[]   drs   =   dt.Select   (strExpr);  
  foreach(DataRow   dr   in   drs)  
  {  
  if   (dr["dealer_id"].ToString   ()   ==   childid)  
  {  
  iResult   =   true;  
  }  
  else  
  {  
  if   (ChkPC(dr["dealer_id"].ToString   (),childid))  
  iResult   =   true;  
  }  
  }  
  return   iResult;  
  }  
   
  //然后遍历整个treeview  
  对每个节点进行判断:  
  if   (ChkLineal(node.Tag   .ToString   (),DEALERID)   !=   -2)  
  {  
          //意思是选中,写的不对。  
          node.Checked   =   true;  
  }Top

8 楼jluhappyman(小子)回复于 2005-04-05 11:30:33 得分 0

谢谢sunnydde(dde)   及   lovvver(春晖)   那么热心,不过sunnydde(dde)的程序还是有点问题,就是当将某个子节点的check变为false(也就是取消选择时),他不管其它的子节点是否有选中的就把他的父节点的选中状态取消了,而此时该父节点的子节点还有处于选中状态的,lovvver(春晖)那个没太仔细看,好象也有点问题,不过总之谢谢二位,我找了个控件做了,不过还是想麻烦sunnydde(dde)看能不能把代码修改过来,我好学习学习,我想写在aftercheck中,明天结帖子,谢谢!!!Top

相关问题

  • TreeView?
  • Treeview??
  • treeview
  • treeview
  • TREEVIEW
  • treeview
  • treeview
  • TreeView
  • TreeView
  • treeview问题?高分

关键词

  • 节点
  • 结点
  • dealerid
  • 选中
  • setchildnode
  • mytn
  • chkpc
  • setparentnode
  • treeview1
  • tn

得分解答快速导航

  • 帖主:jluhappyman
  • sunnydde
  • yidishui1570
  • sunnydde
  • lovvver

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo