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

转载 2007年09月28日 09:18: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

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

 

C#一颗简单多叉树的实现(原理、广度优先遍历、深度优先遍历)

实现原理: 多叉树中的节点有两个域,分别表示节点名以及一个链表,该链表存储其子节点的地址。根据用户输入进行深度递归调用建树。另外还实现了一个层次优先遍历函数。该函数用一个队列实现该多叉树的层次优先遍...

根据父子节点构造树形json

1.写一个业务实体类 import java.util.List; /** * @作者: Seven YU * @创建时间: 2016年10月31日 上午10:21:44 * 功能:orgc...

C# TreeView控件动态绑定数据库

想要形成这种效果的话,首先在数据里面建一张表 create table treedata (id number, context varchar2(50), parentid number); i...

TreeView控件动态绑定数据库内容

数据库结构: 表1:FID,DataName两个用到的字段,注意其中DataName为FID的名字 表2:FID,SID,DataName三个用到的字段,注意其中DataName为SID的名字 ...

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

题目三:读取XML文件动态绑定TreeView控件 一、语言和环境 A、实现语言  C# B、环境要求  Visual Studio 2012 二、功能要求 现使用....

treeview控件(动态数据绑定+整行选择)(WPF)(一)

在使用treeview控件时,数据大多都是从数据库中读取后动态绑定的,而且为了美观,在选择项的时候多会高亮显示整行...

treeview控件(动态数据绑定+整行选择)(WPF)(二)

上一篇中介绍了动态绑定数据库的方法,本篇中将会介绍整行选择的方法                                             ...

c# treeview控件动态绑定数据库,实现2级目录,当输入同一父节点的子节点时,在相同父节点下添加子节点.txt

 private void LoadData()        {            try            {                           //得到所有所有父节点,...

有关C#实验六存储过程和绑定

  • 2009年12月15日 22:02
  • 109KB
  • 下载

.net的TreeView控件绑定数据库表建立树架构

net本身自带的TreeView控件本身可以提供简单快捷的树结构控件,不过需要是在前台界面手动输入静态数据,只能预先设定好值,一一录入。这次使用到的方法是通过在后台代码绑定数据库表,实现动态的数据树显...
  • Annn_kk
  • Annn_kk
  • 2017年04月17日 14:41
  • 297
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TreeView存储过程动态绑定树控件
举报原因:
原因补充:

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