TreeView存储过程动态绑定树控件

转载 2007年10月08日 10:56:00
这个方法绑定速度远远高于上一种(递归绑定)绑定树控件的方法。

下面是CS中的代码:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class GetDataProcedureCreateTree : System.Web.UI.Page
...{
    DbHelperSQL Obj 
= new DbHelperSQL();
    
    
protected void Page_Load(object sender, EventArgs e)
    
...{
        
if (!IsPostBack)
        
...{
            DataTable dt 
= new DataTable();
            dt 
= getChindNode("0");      //得到所有父节点,放到DATATABLE中,这里默认根节点的父节点为 0
            BindNode(dt, TreeView1.Nodes);         //绑定所有的父节点

        }

    }


    
/**//// <summary>
    
/// 调用存储过程,得到父节点的子节点,放到DataTable中
    
/// </summary>
    
/// <param name="ParentID"></param>
    
/// <returns></returns>

    private DataTable getChindNode(string ParentID)
    
...{
        DataTable dt 
= new DataTable();
        dt 
= Obj.ExecuteSql1("TreeViewGetData",ParentID);
        
return dt; 
    }


    
/**//// <summary>
    
/// 填充节点事件
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

    protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
    
...{
        getDataNode(e.Node.Value, e.Node);     
//点加号展开时调用.得到数据并绑定.传入点击结点ID,和点击节点对像.
    }



    
private void getDataNode(string ParentID,TreeNode Node)
    
...{
        BindNode(getChindNode(ParentID), Node.ChildNodes);       
//向结点填充数据.
    }


    
/**//// <summary>
    
/// 填充节点
    
/// </summary>
    
/// <param name="dt"></param>
    
/// <param name="Node"></param>

    private void BindNode(DataTable dt ,TreeNodeCollection Node)
    
...{
        DataView dv 
= new DataView(dt);
        TreeNode NewNode;
        
foreach (DataRowView dr in dv)
        
...{
            NewNode 
= new TreeNode();
            NewNode.Text 
= dr["NodeName"].ToString();
            NewNode.Value 
= dr["ID"].ToString();
            Node.Add(NewNode);
            
//是否动态添加结点。
            NewNode.PopulateOnDemand = Convert.ToInt32(dr["ChildNodeCount"].ToString()) > 0;
        }

    }



}

 下面是aspx界面中的源:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GetDataProcedureCreateTree.aspx.cs" Inherits="GetDataProcedureCreateTree" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>无标题页</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
      
<asp:TreeView ID="TreeView1" runat="server" ExpandDepth="0"
            OnTreeNodePopulate
="TreeView1_TreeNodePopulate" Style="position: relative" ImageSet="Simple" CollapseImageUrl="~/image/decrease.bmp" ExpandImageUrl="~/image/add.bmp">
          
<ParentNodeStyle Font-Bold="False" />
          
<HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" />
          
<SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD" HorizontalPadding="0px"
              VerticalPadding
="0px" />
          
<NodeStyle Font-Names="Tahoma" Font-Size="10pt" ForeColor="Black" HorizontalPadding="5px"
              NodeSpacing
="0px" VerticalPadding="2px" />
        
</asp:TreeView>
    
</div>
    
</form>
</body>
</html>

下面是DbHelperSQL.cs中的代码:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;


/**//// <summary>
/// DbHelperSQL 对数据库的各种操作。
/// </summary>

public class DbHelperSQL             //连接SQLSERVER数据库
...{
    SqlConnection Conn;                    
//定义连接
    public DbHelperSQL()
    
...{
    }

    
/**//// <summary>
    
/// 连字数据库
    
/// </summary>

    public void ConnectDataBase()
    
...{
        
string Connectionstring = ConfigurationSettings.AppSettings["ConnectionString"];
        Conn 
= new SqlConnection(Connectionstring);
        Conn.Open();
    }


    
/**//// <summary>
    
/// 执行存储过程返回DataTable
    
/// </summary>
    
/// <param name="sql"></param>
    
/// <param name="ParentID"></param>
    
/// <returns></returns>

    public DataTable ExecuteSql1(string sql, string ParentID)
    
...{
        DataTable dt;
        
try
        
...{
            ConnectDataBase();
            dt 
= new DataTable();
            SqlDataAdapter da 
= new SqlDataAdapter(sql, Conn);

            SqlParameter parm 
= new SqlParameter("@ParentID", ParentID);
            da.SelectCommand.Parameters.Add(parm);
            da.SelectCommand.CommandType 
= CommandType.StoredProcedure;            
            da.Fill(dt);
            Conn.Close();
            
return dt;
        }

        
catch
        
...{
            Conn.Close();
            
return dt = null;
        }

    }

}

 

存储过程:

CREATE PROCEDURE TreeViewGetData(
@ParentID nvarchar(
40))                    --参数,父节点ID
AS
   IF @ParentID IS NULl               
--如果,父节点ID为空
           
   SELECT [ID],[NodeName] ,(
      SELECT COUNT(
*) FROM RA_SubjectStore WHERE ParentID=Org.[ID]) AS ChildNodeCount
    FROM RA_SubjectStore AS Org WHERE @ParentID  IS NULL
   ELSE
    
--查询出该父节点下第一级子节点
    SELECT [ID],[NodeName] ,(
      SELECT COUNT(
*) FROM RA_SubjectStore WHERE ParentID=Org.[ID]) AS ChildNodeCount
    FROM RA_SubjectStore AS Org WHERE ParentID 
=@ParentID

GO

代码已经没有漏掉的了。希望能给大家一点帮助!

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1804314

 

读取XML文件动态绑定TreeView控件练习题

题目三:读取XML文件动态绑定TreeView控件 一、语言和环境 A、实现语言  C# B、环境要求  Visual Studio 2012 二、功能要求 现使用....
  • baidu_36074048
  • baidu_36074048
  • 2017年03月12日 16:18
  • 882

WPF中TreeView的使用

WPF中对树控件的使用主要有两种方法, 方法一,对TreeView进行静态搭建,对应的XAML文件代码如下: ...
  • lzhui1987
  • lzhui1987
  • 2016年05月11日 23:08
  • 7444

C# WinForm TreeView 动态绑定数据库例如:省、市、区县 三级

前段时间做项目用到了TreeView,闲来没事自己想总结一下TreeView的绑定省市县的方法,希望对想学习的博友有所帮助。提示:省市县数据库可以在网上下载资源很多的。废话不多说了上代码…… 用到的...
  • lianni_1101
  • lianni_1101
  • 2015年06月10日 14:51
  • 1310

C#TreeView控件与XML相关操作

在C#的应用开发中,TreeView控件是一种比较常用的控件,主要反映了父子节点之间的关系,由于TreeView控件与XML文件的组织结构比较类似,可以把TreeView控件与XML文件结合使用。Tr...
  • pengshupan
  • pengshupan
  • 2016年02月29日 15:44
  • 2279

winform如何实现将数据库数据加载到树上

一、简介对于winform中如何加载xml生成目录树,在前边一篇文章“c#如何实现从xml中加载树目录,并且显示完整的Text”中我已经写了详细的过程。但是有些时候我们不可能将大量的数据存储到xml中...
  • ztzi321
  • ztzi321
  • 2015年05月07日 16:38
  • 2488

C# TreeView控件动态组树(可控制节点级别)

需求分析: 面对如此“强(wu)大(yu)”的需求,本菜鸟也是想尽办法做封装,来帮助深陷huohai的亲们。。我们的查询界面变成了树+下拉框+复选框,每个界面都有树,我就索性把树封装了,...
  • u012904383
  • u012904383
  • 2016年04月03日 22:48
  • 2055

WPF中的TreeView如何定义模版,并绑定数据

转自:http://www.cnblogs.com/izualx/archive/2011/02/03/1949055.html   最近在用WPF做开发,项目进展的还算顺利,WPF总体来...
  • AAA123524457
  • AAA123524457
  • 2015年06月25日 14:12
  • 2931

Winfrom开发之通过treeview实现树形结构

Winfrom开发之通过treeview实现树形结构 方法一、 节点法 分析 节点法类似于树形结构中的树,通过父节点和子节点 以及节点深度来查找 根节点没有父节点 深度为0 部门与所属子部门的...
  • l1158513573
  • l1158513573
  • 2015年07月01日 20:00
  • 2250

改进: 简单的WPF目录树

Reaction to: A Simple WPF Explorer Tree Sacha Barber recently posted an article to CodeProject ti...
  • save4me
  • save4me
  • 2014年07月08日 09:49
  • 1656

QML树控件TreeView的使用(上)

在Qt5.5之前是没有树控件的,我们在使用时用的是ListView来构造出一个树,Qt5.5之后的QML开发阶段,有了树控件TreeView,本篇着重记录QML的TreeView的使用。根据MVC分解...
  • Shado_walker
  • Shado_walker
  • 2017年02月22日 19:39
  • 2268
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TreeView存储过程动态绑定树控件
举报原因:
原因补充:

(最多只允许输入30个字)