热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[原创]TreeView的递归问题!FAQ

问题陈述:数据库结构表名:Product_ClassProduct_Class_idNameParentDe

问题陈述:

数据库结构
表名:Product_Class
Product_Class_id           Name            Parent            Depth
                            1                       aa               0                 1
                            2                       bb               0                 1
                            3                       aa1              1                2
                            4                       aa2              1                2
                            5                       bb1              2                2
                            6                       bb2              2                2
 表名:Product_List
Product_List_ID             Product_Class_ID           Name
                            1                        3                        aa1product
                            2                         4                        aa2product
                            3                         5                        bb1product
                            4                         6                        bb2product


     
我想用treeview控件实现如下的功能,一开始列出depth=1的所有类别名字
点一下+号列出下一级的类别,依次类推,直到点到最后一层。在最后一层中列出属于这个类别下的产品名字,并且每一个产品名字前面有一个复选框如过选中的话它的value就为它的ID值?



 

None.gifprivate void Page_Load(object sender, System.EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif{
              TreeView1.Attributes.Add("oncheck","getV();");
InBlock.gif           
//把2个表建立关联
InBlock.gif
            string SelectMember_Name="SELECT dbo.Product_Class.*, dbo.Product_List.Name AS Pname FROM dbo.Product_Class LEFT OUTER JOIN dbo.Product_List ON dbo.Product_Class.Product_Class_id = dbo.Product_List.Product_Class_ID";
InBlock.gif            SqlConnection myConnection 
= new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString2"]);
InBlock.gif            myConnection.Open();
InBlock.gif            SqlCommand cmd1 
= new SqlCommand(SelectMember_Name,myConnection);
InBlock.gif            SqlDataAdapter adp 
= new SqlDataAdapter(SelectMember_Name,myConnection);
InBlock.gif            DataSet ds
=new DataSet();
InBlock.gif            adp.Fill(ds);
InBlock.gif            
this.ViewState["ds"]=ds; 
InBlock.gif            AddTree(
0, (TreeNode)null);
InBlock.gif
ExpandedBlockEnd.gif        }

None.gif

 

 

None.gifpublic void AddTree(int Parent,TreeNode pNode) 
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif{
InBlock.gif
InBlock.gif            DataSet ds
=(DataSet) this.ViewState["ds"]; 
InBlock.gif            DataView dvTree 
= new DataView(ds.Tables[0]);
InBlock.gif            
//过滤ParentID,得到当前的所有子节点
InBlock.gif
            dvTree.RowFilter =  "[Parent] = " + Parent;
InBlock.gif            
if (dvTree.Count ==0//为最后一层节点
ExpandedSubBlockStart.gifContractedSubBlock.gif
            dot.gif{
InBlock.gif                DataView dv 
= new DataView(ds.Tables[0]);
InBlock.gif                dv.RowFilter
="[Product_Class_id]= "+Parent;
InBlock.gif                
foreach(DataRowView Row in dv) 
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                     TreeNode Node
=new TreeNode() ;
                       Node.CheckBox =true;
                       Node.ID=Row["Product_Class_id"].ToString();
InBlock.gif                    Node.Text 
= Row["Pname"].ToString();
InBlock.gif                    pNode.Nodes.Add(Node);
ExpandedSubBlockEnd.gif                }

InBlock.gif                
return;
ExpandedSubBlockEnd.gif             }

InBlock.gif            
foreach(DataRowView Row in dvTree) 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif
InBlock.gif                TreeNode Node
=new TreeNode() ;
InBlock.gif                
if(pNode == null
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{    //添加根节点
InBlock.gif
                    Node.Text = Row["Name"].ToString();
InBlock.gif                    TreeView1.Nodes.Add(Node);
InBlock.gif                    Node.Expanded
=true;
InBlock.gif                    AddTree(Int32.Parse(Row[
"Product_Class_ID"].ToString()), Node);    //再次递归
ExpandedSubBlockEnd.gif
                }
 
InBlock.gif                
else 
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{  //添加当前节点的子节点
InBlock.gif

InBlock.gif                    Node.Text 
= Row["Name"].ToString();
InBlock.gif                    pNode.Nodes.Add(Node);
InBlock.gif                    Node.Expanded 
= false;
InBlock.gif                    AddTree(Int32.Parse(Row[
"Product_Class_ID"].ToString()),Node);     //再次递归
InBlock.gif

ExpandedSubBlockEnd.gif                }

InBlock.gif
ExpandedSubBlockEnd.gif            }
      
ExpandedBlockEnd.gif        }

None.gif
  这个是为了看节点的ID
None.gif<script  language &#61;Javascript >
None.gif        
function getV()
None.gif        {
None.gif         
var pNode&#61;TreeView1.getTreeNode(TreeView1.clickedNodeIndex)
None.gif         alert(pNode.getAttribute(
"ID"));
None.gif        
None.gif        }
None.gif        
None.gif        
script>


转:https://www.cnblogs.com/goody9807/archive/2005/07/06/187209.html



推荐阅读
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 本文探讨了互联网服务提供商(ISP)如何可能篡改或插入用户请求的数据流,并提供了有效的技术手段来防止此类劫持行为,确保网络环境的安全与纯净。 ... [详细]
  • 本文详细介绍了如何使用C#实现不同类型的系统服务账户(如Windows服务、计划任务和IIS应用池)的密码重置方法。 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 在使用mybatis进行mapper.xml测试的时候发生必须为元素类型“mapper”声明属性“namespace”的错误项目目录结构UserMapper和UserMappe ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 题目概述:Sereja 拥有一个由 n 个整数组成的数组 a1, a2, ..., an。他计划执行 m 项操作,这些操作包括更新数组中的特定元素、增加数组中所有元素的值,以及查询数组中的特定元素。 ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 数据输入验证与控件绑定方法
    本文提供了多种数据输入验证函数及控件绑定方法的实现代码,包括电话号码、数字、传真、邮政编码、电子邮件和网址的验证,以及报表绑定和自动编号等功能。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • 在Android中实现黑客帝国风格的数字雨效果
    本文将详细介绍如何在Android平台上利用自定义View实现类似《黑客帝国》中的数字雨效果。通过实例代码,我们将探讨如何设置文字颜色、大小,以及如何控制数字下落的速度和间隔。 ... [详细]
  • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
author-avatar
mobiledu2502861133
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有