本帖最后由 yao970953039 于 2009-12-07 10:09:10 编辑

解决方案 »

  1.   

    id  父id  name然后去绑定 树控件吧。
      

  2.   

    惭愧
    我现在只有思路
    没有代码
    你要实现tree结构,表应该有个parent字段
    根据这个字段查询出来。
    首先查询出跟路径
    再根据跟路径查询出子树
    依次,递归
      

  3.   


    --> 测试数据:[TB]
    if object_id('[TB]') is not null drop table [TB]
    create table [TB]([a] int,[b] int,[c] int,[d] int,[e] int,[f] int,[g] int,[h] int)
    insert [TB]
    select 1,2,3,4,5,6,7,8declare @columns varchar(10)
    set @columns='a,b,c,f,g'
    select space((select count(1) from syscolumns where colid<a.colid and  ID=a.ID and charindex(','+name+',',','+@columns+',')>0)/2)+rtrim(colid)
    from syscolumns a 
    where ID=object_id('TB') and charindex(','+name+',',','+@columns+',')>0/*
                                                                                                                                                                                                                                                                     
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
    1
    2
     3
     6
      7(所影响的行数为 5 行)*/drop table TB
      

  4.   

    不知道哪个是你要的
    --> 测试数据:[TB]
    if object_id('[TB]') is not null drop table [TB]
    create table [TB]([a] int,[b] int,[c] int,[d] int,[e] int,[f] int,[g] int,[h] int)
    insert [TB]
    select 1,2,3,4,5,6,7,8declare @columns varchar(10)
    set @columns='a,b,c,f,g'
    select space(((select count(1) from syscolumns where colid<a.colid and  ID=a.ID and charindex(','+name+',',','+@columns+',')>0)/2)*2)+rtrim(colid)
    from syscolumns a 
    where ID=object_id('TB') and charindex(','+name+',',','+@columns+',')>0                                                                                                                                                                                                                                                                 
    /*
                                                                                                                                                                                                                                                                     
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
    1
    2
      3
      6
        7(所影响的行数为 5 行)*/
    declare @columns varchar(10)
    set @columns='a,b,c,f,g'
    select space((select count(1) from syscolumns where colid<a.colid and  ID=a.ID and charindex(','+name+',',','+@columns+',')>0))+rtrim(colid)
    from syscolumns a 
    where ID=object_id('TB') and charindex(','+name+',',','+@columns+',')>0/*
                                                                                                                                                                                                                                                                     
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
    1
     2
      3
       6
        7(所影响的行数为 5 行)*/
    drop table TB
      

  5.   

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                string body = ShowNodes(0, 0);
                lblBody.Text = body;
            }
        }
        private string ShowNodes(int pid, int level)
        {
            string body = "";
            DataTable dt = da.Query("select * from DropDownList where ParentId=" + pid.ToString());
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                string space = "";
                for (int j = 0; j < level; j++)
                {
                    space += blank;
                }
                body += "<br>" + space + dt.Rows[i]["MyName"].ToString();
                body += "<a style='font-size:12px' href='#' " +
                    "onclick='showDialog(\""+dt.Rows[i]["MyId"].ToString()+"\",\""+
                    dt.Rows[i]["MyName"].ToString()+"\")'>添加子节点</a>";
                body += ShowNodes(Convert.ToInt32(dt.Rows[i]["MyId"].ToString()), level+1);
            }
            return body;
        }
      

  6.   

    http://topic.csdn.net/u/20091117/11/0520f3ca-10f0-4924-8743-1523a8984530.html
      

  7.   

      问下是要读 XML 的 还是 读数据库 的 !
      

  8.   

    非哥。。看了你给的代码。。不是我需要的,我这个只能手写代码在前台实现,最多可以拖TreeView,自己绑定方法
      

  9.   

    [email protected]  大哥要不+我QQ聊聊
      

  10.   


    在SQL SERVER 2000中建表的脚本:
    CREATE TABLE [dbo].[tbTree] (       [ID] [int] IDENTITY (1, 1) NOT NULL ,       [Context] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,       [ParentID] [int] NULL ) ON [PRIMARY] 
    在表中添加如下记录:
    SET IDENTITY_INSERT tbtree ONinsert tbtree (ID,Context,ParentID)  values ( 1,'中国',0)insert tbtree (ID,Context,ParentID)  values ( 2,'北京',1)insert tbtree (ID,Context,ParentID)  values ( 3,'天津',1)insert tbtree (ID,Context,ParentID)  values ( 4,'河北省',1)insert tbtree (ID,Context,ParentID)  values ( 5,'广东省',1)insert tbtree (ID,Context,ParentID)  values ( 6,'广州',5)insert tbtree (ID,Context,ParentID)  values ( 7,'四川省',1)insert tbtree (ID,Context,ParentID)  values ( 8,'成都',7)insert tbtree (ID,Context,ParentID)  values ( 9,'深圳',5)insert tbtree (ID,Context,ParentID)  values ( 10,'石家庄',4)insert tbtree (ID,Context,ParentID)  values ( 11,'辽宁省',1)insert tbtree (ID,Context,ParentID)  values ( 12,'大连',11)insert tbtree (ID,Context,ParentID)  values ( 13,'上海',1)insert tbtree (ID,Context,ParentID)  values ( 14,'天河软件园',6)insert tbtree (ID,Context,ParentID)  values ( 15,'汕头',5)SET IDENTITY_INSERT tbtree off
    下载Treeview控件地址
    http://msdn.microsoft.com/downloads/samples/internet/ASP_DOT_NET_ServerControls/WebControls/default.asp
    安装后,通过“自定义工具箱”->“.net框架组件”把TreeView添加到工具箱里。
    新建一个项目,选择Visual Basic.Net 工程Asp.net Web应用程序,在页面上拖画一个TreeView控件。
     
     
    Html页:
    <%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %><%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="Tree.WebForm1"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML>     <HEAD>         <title>WebForm1</title>         <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.0">         <meta name="CODE_LANGUAGE" content="Visual Basic 7.0">         <meta name="vs_defaultClientScript" content="JavaScript">         <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">     </HEAD>     <body MS_POSITIONING="GridLayout">         <form id="Form1" method="post" runat="server">              <FONT face="宋体">                   <iewc:TreeView id="TreeView1" style="Z-INDEX: 101; LEFT: 39px; TOP: 68px" runat="server"></iewc:TreeView></FONT>         </form>     </body></HTML> 
     
    后台代码:
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load        Dim ds As New DataSet()        Dim CN As New SqlConnection()        Try            '初始化连接字符串            CN.ConnectionString = "data source=pmserver;initial catalog=Bench;persist security info=False;user id=sa;Password=sa;"            CN.Open()            Dim adp As SqlDataAdapter = New SqlDataAdapter("select * from tbTree", CN)            adp.Fill(ds)            Me.ViewState("ds") = ds        Catch ex As Exception#If DEBUG Then            Session("Error") = ex.ToString()            Response.Redirect("error.aspx")        '?跳转程序的公共错误处理页面#End If        Finally            '关闭连接            CN.Close()        End Try        '调用递归函数,完成树形结构的生成        AddTree(0, Nothing)    End Sub     '递归添加树的节点    Private Sub AddTree(ByVal ParentID As Integer, ByVal pNode As TreeNode)        Dim ds As DataSet        ds = Me.ViewState("ds")        Dim dvTree As New DataView()        dvTree = New DataView(ds.Tables(0))        '过滤ParentID,得到当前的所有子节点        dvTree.RowFilter = "PARENTID = " + ParentID.ToString         Dim Row As DataRowView        For Each Row In dvTree            Dim Node As New TreeNode()            If pNode Is Nothing Then  '判断是否根节点                '添加根节点                Node.Text = Row("ConText").ToString()                TreeView1.Nodes.Add(Node)                Node.Expanded = True                '再次递归                AddTree(Int32.Parse(Row("ID").ToString()), Node)            Else                '?添加当前节点的子节点                Node.Text = Row("ConText").ToString()                pNode.Nodes.Add(Node)                Node.Expanded = True                '再次递归                AddTree(Int32.Parse(Row("ID").ToString()), Node)            End If        Next    End Sub 
    C#版本:
     
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using Microsoft.Web.UI.WebControls;
    using System.Data.SqlClient;
    namespace TreeCS
    {
           /// <summary>
           /// WebForm1 的摘要说明
           /// </summary>
           public class WebForm1 : System.Web.UI.Page
           {
                  protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
           
                  private void Page_Load(object sender, System.EventArgs e)
                  {
                         // 定义数据库连接
                         SqlConnection CN = new SqlConnection();
                         try 
                         {
                                //初始化连接字符串
                                CN.ConnectionString= "data source=pmserver;initial catalog=Bench;persist security info=False;user id=sa;Password=sa;";
                                CN.Open();
     
                                SqlDataAdapter adp = new SqlDataAdapter("select * from tbTree",CN);
                                DataSet ds=new DataSet();
                                adp.Fill(ds);
                                this.ViewState["ds"]=ds; 
                         }
                         catch (Exception ex)
                         {
                                Session["Error"] = ex.ToString();
                                Response.Redirect("error.aspx");       //?跳转程序的公共错误处理页面
                         }
                         finally 
                         {
                                CN.Close();
                         }
                         //调用递归函数,完成树形结构的生成
                         AddTree(0, (TreeNode)null);
                  }
     
                  //递归添加树的节点
                  public void AddTree(int ParentID,TreeNode pNode) 
                  {
                         DataSet ds=(DataSet) this.ViewState["ds"]; 
                         DataView dvTree = new DataView(ds.Tables[0]);
                         //过滤ParentID,得到当前的所有子节点
                         dvTree.RowFilter =  "[PARENTID] = " + ParentID;
     
                         foreach(DataRowView Row in dvTree) 
                         {
                                TreeNode Node=new TreeNode() ;
                                if(pNode == null) 
                                {    //添加根节点
                                       Node.Text = Row["ConText"].ToString();
                                       TreeView1.Nodes.Add(Node);
                                       Node.Expanded=true;
                                       AddTree(Int32.Parse(Row["ID"].ToString()), Node);    //再次递归
                                } 
                                else 
                                {   //?添加当前节点的子节点
                                       Node.Text = Row["ConText"].ToString();
                                       pNode.Nodes.Add(Node);
                                       Node.Expanded = true;
                                       AddTree(Int32.Parse(Row["ID"].ToString()),Node);     //再次递归
                                }
                         }                   
                  }            
     
                  #region Web Form Designer generated code
                  override protected void OnInit(EventArgs e)
                  {
                         //
                         // CODEGEN该调用是 ASP.NET Web 窗体设计器所必需的。
                         //
                         InitializeComponent();
                         base.OnInit(e);
                  }
                  
                  /// <summary>
                  ///设计器支持所需的方法 - 不要使用代码编辑器修改
                  /// 此方法的内容
                  /// </summary>
                  private void InitializeComponent()
                  {    
                         this.Load += new System.EventHandler(this.Page_Load);
     
                  }
                  #endregion
           }
    }
      

  11.   

    多谢mohugomohu兄了。大至是你说的那样,我在改改就成,多谢各位跟帖的兄弟了。
      

  12.   

    jack15850798154兄
    由于我的数据量过于庞大,不宜使用控件,你的代码不错,我改改