动态生成treeview

上一篇blog里的方法可以一次性的把数据库里的数据构造成treeview,但是如果数据量特别大那种方法就不行了,下面是动态构造treeview的办法,就是先把根(第一级)构造出来,然后每一个根节点下面增加一个虚拟的假子结点(为了使+号显示),当点击跟时构造出他下面的真正的子结点,依此类推。
代码如下:
ContractedBlock.gif ExpandedBlockStart.gif      初始化物资树 #region 初始化物资树
InBlock.gif    
//--------------------------------------------------------------------------------------------------------
ExpandedSubBlockStart.gifContractedSubBlock.gif
    /**//// <summary>
InBlock.gif    
/// 初始化根treenode(rootnode)
InBlock.gif    
/// </summary>
ExpandedSubBlockEnd.gif    
/// <param name="toTreeView"></param>

InBlock.gif    public static void InvTree_InitEx1(TreeView toTreeView)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        toTreeView.Nodes.Clear();
InBlock.gif        
int iLevel = 1;// tmpCorp.iTreeLevel;
InBlock.gif
        ORtInv corp = new ORtInv();
InBlock.gif        ORDataReader
<ORtInv> reader = corp.DataAccessor.ExecuteReader(CommandType.Text, "select * from tInv where iTreeLevel=1 and sStatus = '1'", corp, null);
InBlock.gif
InBlock.gif        TreeNode tmpNode 
= new TreeNode();
InBlock.gif        
foreach (ORtInv u in reader)//循环每行数据
ExpandedSubBlockStart.gifContractedSubBlock.gif
        dot.gif{
InBlock.gif            TreeNode rootNode 
= new TreeNode();
InBlock.gif            rootNode.Text 
= u.sInv_no.ToString().Trim() + u.sInv_name.ToString().Trim();
InBlock.gif            rootNode.Value 
= u.pk_ID.ToString().Trim();
InBlock.gif            rootNode.ToolTip 
= u.sInv_name;
InBlock.gif            toTreeView.Nodes.Add(rootNode);
InBlock.gif            rootNode.Expanded 
= false;
ExpandedSubBlockEnd.gif        }

InBlock.gif        reader.Close();
InBlock.gif
InBlock.gif
InBlock.gif        
for (int i = 0; i < toTreeView.Nodes.Count; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            TreeNode nothingNode 
= new TreeNode();
InBlock.gif            nothingNode.Text 
= "Node";
InBlock.gif            nothingNode.Value 
= "0";
InBlock.gif            toTreeView.Nodes[i].ChildNodes.Add(nothingNode);
InBlock.gif            nothingNode.Expanded 
= true;
InBlock.gif            
//toTreeView.Nodes[i].ChildNodes.
ExpandedSubBlockEnd.gif
        }

InBlock.gif
ExpandedSubBlockEnd.gif    }

ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**//// <summary>
InBlock.gif    
/// 为某个treenode增加下面的childnode
InBlock.gif    
/// </summary>
ExpandedSubBlockEnd.gif    
/// <param name="toTreeView"></param>

InBlock.gif    public static void InvTree_InitEx2(TreeView toTreeView, TreeNode dadNode)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        dadNode.ChildNodes.Clear();
//先清空子结点
InBlock.gif
        ORtInv tmpInv = new ORtInv();
InBlock.gif        tmpInv.pk_ID 
= Convert.ToInt64(dadNode.Value);
InBlock.gif        tmpInv.DataAccessor.Select(
"pk_ID=@ipk_ID");
InBlock.gif
InBlock.gif        
string sDadValue = tmpInv.sInv_no;
InBlock.gif
InBlock.gif        ORtInv corp 
= new ORtInv();
InBlock.gif        ORDataReader
<ORtInv> reader = corp.DataAccessor.ExecuteReader(CommandType.Text, "select * from tInv where sStatus = '1' and sParent_no=" + Common.QuotedStr(sDadValue), corp, null);
InBlock.gif
InBlock.gif        TreeNode tmpNode 
= new TreeNode();
InBlock.gif        
foreach (ORtInv u in reader)//循环每行数据
ExpandedSubBlockStart.gifContractedSubBlock.gif
        dot.gif{
InBlock.gif            tmpNode 
= dadNode;
InBlock.gif            
if (tmpNode != null)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                TreeNode subNode 
= new TreeNode();
InBlock.gif                subNode.Text 
= u.sInv_no.ToString().Trim() + u.sInv_name.ToString().Trim();
InBlock.gif                subNode.Value 
= u.pk_ID.ToString().Trim();
InBlock.gif                subNode.ToolTip 
= u.sInv_name;
InBlock.gif                tmpNode.ChildNodes.Add(subNode);
InBlock.gif                subNode.Expanded 
= false;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif        reader.Close();
InBlock.gif
InBlock.gif        
for (int i = 0; i < dadNode.ChildNodes.Count; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            TreeNode nothingNode 
= new TreeNode();
InBlock.gif            nothingNode.Text 
= "Node";
InBlock.gif            nothingNode.Value 
= "0";
InBlock.gif            dadNode.ChildNodes[i].ChildNodes.Add(nothingNode);
InBlock.gif            nothingNode.Expanded 
= false;
InBlock.gif            
//toTreeView.Nodes[i].ChildNodes.
ExpandedSubBlockEnd.gif
        }

ExpandedSubBlockEnd.gif    }

ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**//// <summary>
InBlock.gif    
/// 递归查找父节点
InBlock.gif    
/// </summary>
InBlock.gif    
/// <param name="tnParent">指定一个根节点,然后遍历它</param>
ExpandedSubBlockEnd.gif    
/// <param name="strValue">所要查找的节点的value</param>

InBlock.gif    public static TreeNode FindNode(TreeNode tnParent, string strValue)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
if (tnParent == nullreturn null;
InBlock.gif        
if (tnParent.Value == strValue) return tnParent;
InBlock.gif        TreeNode tnRet 
= null;
InBlock.gif        
foreach (TreeNode tn in tnParent.ChildNodes)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            tnRet 
= FindNode(tn, strValue);
InBlock.gif            
if (tnRet != nullbreak;
ExpandedSubBlockEnd.gif        }

InBlock.gif        
return tnRet;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedBlockEnd.gif    
#endregion

None.gif
None.gif    
protected   void  tvLeft_TreeNodeExpanded( object  sender, TreeNodeEventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
//lbStatus.Text = "Expanded:"+e.Node.Text;
InBlock.gif
        InvTree_InitEx2(tvLeft, e.Node);
InBlock.gif        
//e.Node.Selected = true;
ExpandedBlockEnd.gif
    }

开始时以为点击treeview的+号只能触发客户端事件,后来加进去TreeNodeExpanded以后发现是可以触发服务器代码的:)

转载于:https://www.cnblogs.com/vagerent/archive/2007/03/22/683910.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值