我会用Treeview做递归显示数据 也会用DataList 嵌套 DataList所以我在想一个问题 能不能用 DataList做递归呢 我主要想实现 主标题 有多个子标题 ,每个子标题有可能有多个子标题,依次递归!我写了一部分代码 请大家给我提提意见现在还没有实现这个功能 aspx<%@ Page Language="C#" AutoEventWireup="true" CodeFile="dhtest.aspx.cs" Inherits="dh_dhtest" %><!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 id="Head1" runat="server">
    <title>dh</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="UTF-8" />
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DataList ID="DLTitle" runat="server" Width="100%" >
            <ItemTemplate>
                <asp:Label ID="lblid" runat="server" ></asp:Label>
            </ItemTemplate>
        </asp:DataList>
    </div>
    </form>
</body>
</html>csusing System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;public partial class dh_dhtest : System.Web.UI.Page
{
    string strid = string.Empty;
    dh _dh = new dh();
    DataTable _dt = new DataTable();
    protected void Page_Load(object sender, EventArgs e)
    {
        //dhtitlebind();        if (!Page.IsPostBack)
        {
            dhtitlebind();
            _dt = _dh.selectDHTitle();//不多说了  就是查询数据库,数据库设计在下面
            CreareTreeView();
        }
    }    private void dhtitlebind()
    {
        _dt = _dh.selectDHTitle();
        DLTitle.DataSource = _dt;
        DLTitle.DataBind();
    }    private void CreareTreeView()//创建父节点
    {
        string strdhin = "0";
        DataView dvList = new DataView(this._dt);
        dvList.RowFilter = "dhin='" + strdhin + "'";  //过滤父节点         foreach (DataListItem item in DLTitle.Controls)
        {
            if (item.ItemType == ListItemType.Header)
            {
                Label lblids = (Label)item.FindControl("lblid");
                foreach (DataRowView dv in dvList)
                {
                    strid = dv["dhtid"].ToString();  //节点ID 
                    lblids.Text = dv["dhtitle"].ToString();  //节点名称 
                    CreateTreeNode(strid);
                }
            }
        }
    }    private void CreateTreeNode(string strid)//创建子节点
    {
        DataView dvList = new DataView(this._dt);
        dvList.RowFilter = "dhin='" + strid + "'";  //过滤父节点 
        foreach (DataRowView dv in dvList)
        {
            foreach (DataListItem item in DLTitle.Controls)
            {
                if (item.ItemType == ListItemType.Header)
                {
                    Label lblids = (Label)item.FindControl("lblid");                    strid = dv["dhtid"].ToString();  //节点ID 
                    lblids.Text = dv["dhtitle"].ToString();  //节点名称 
                    CreateTreeNode(strid);//递归                 }
            } 
        }
    }
}
SQLCREATE TABLE [dbo].[dht] (
[dhtid] [int] IDENTITY (1, 1) NOT NULL ,
[dhtitle] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL ,
[dhtype] [int] NULL ,
[dhin] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[dhts] [int] NULL ,
[dhttime] [datetime] NULL 
) ON [PRIMARY]

解决方案 »

  1.   

        private void AddNotes()
        {
            //第一级公司名称
            Company_OrganizeInfo RootInfo = new Company_OrganizeInfo();
            RootInfo.strName = CompanyName;        CompanyOrganizeNode rootNode = new CompanyOrganizeNode(RootInfo, APP_User.CurrentUserReadOnlyCompany);
            TreeView1.Nodes.Add(rootNode);
            IList<Company_OrganizeInfo> list = Company_Organize.Search(-1, CompanyID, "", 0, -1, 1);
            foreach (Company_OrganizeInfo Info in list)
            {
                CompanyOrganizeNode replyNode = new CompanyOrganizeNode(Info, APP_User.CurrentUserReadOnlyCompany);
                replyNode.NavigateUrl = "";
                replyNode.Target = "";
                //replyNode.Expanded = false;
                rootNode.ChildNodes.Add(replyNode);
                if (Info.Chirld.Count > 0)
                {
                    addChirld(Info.Chirld, replyNode);
                }
            }
        }    private void addChirld(IList<Company_OrganizeInfo> list, TreeNode parentNode)
        {
            foreach (Company_OrganizeInfo Info in list)
            {
                CompanyOrganizeNode replyNode = new CompanyOrganizeNode(Info, APP_User.CurrentUserReadOnlyCompany);
                replyNode.NavigateUrl = "";
                replyNode.Target = "";
                //replyNode.Expanded = false;
                parentNode.ChildNodes.Add(replyNode);
                if (Info.Chirld.Count > 0)
                {
                    addChirld(Info.Chirld, replyNode);
                }
            }
        }
     动态添加  1级节点 2级节点  
      

  2.   

      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CrystalBtn1.Click
            Try
                Getsouce()
                Dim i As Integer
                Dim applyvalue As String
                Dim applygrade As String
                Dim applymule As String
                TreeView1.Nodes.Clear()
                For i = 0 To dsPub.Tables(0).Rows.Count - 1
                    If ComboBox1.Text = dsPub.Tables(0).Rows(i)("object_id").ToString() Then
                        applyvalue = dsPub.Tables(0).Rows(i)("object_applyvalue").ToString()
                        applygrade = dsPub.Tables(0).Rows(i)("object_applygrade").ToString()
                        applymule = dsPub.Tables(0).Rows(i)("object_applymule").ToString()
                    End If
                Next
                TreeView1.Nodes.Add(ComboBox1.Text + " (" + (Double.Parse(applyvalue) * 100).ToString() + "%," + applygrade + "撰," + applymule + ")")
                Inset_Tree_A(TreeView1.Nodes(0).Nodes, ComboBox1.Text)
                TreeView1.ExpandAll()
            Catch ex As Exception
                Conn.ErrorMessage(ex.Message.ToString())
            End Try
        End Sub  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CrystalBtn1.Click
            Try
                Getsouce()
                Dim i As Integer
                Dim applyvalue As String
                Dim applygrade As String
                Dim applymule As String
                TreeView1.Nodes.Clear()
                For i = 0 To dsPub.Tables(0).Rows.Count - 1
                    If ComboBox1.Text = dsPub.Tables(0).Rows(i)("object_id").ToString() Then
                        applyvalue = dsPub.Tables(0).Rows(i)("object_applyvalue").ToString()
                        applygrade = dsPub.Tables(0).Rows(i)("object_applygrade").ToString()
                        applymule = dsPub.Tables(0).Rows(i)("object_applymule").ToString()
                    End If
                Next
                TreeView1.Nodes.Add(ComboBox1.Text + " (" + (Double.Parse(applyvalue) * 100).ToString() + "%," + applygrade + "撰," + applymule + ")")
                Inset_Tree_A(TreeView1.Nodes(0).Nodes, ComboBox1.Text)
                TreeView1.ExpandAll()
            Catch ex As Exception
                Conn.ErrorMessage(ex.Message.ToString())
            End Try
        End Sub这是好久以前写的,参考下吧!
      

  3.   

    在datalist里嵌套treeview
    <asp:TreeView ID="tree" runat="server" 
            onselectednodechanged="tree_SelectedNodeChanged" ></asp:TreeView>
        </ItemTemplate>
    protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if (e.Item.ItemIndex != -1)
            {
                TreeView tv = (TreeView)e.Item.FindControl("tree");
                TreeNode node = new TreeNode();
                node.Text = "1";
                node.Value = "1";
                tv.Nodes.Add(node);
            }
        }
    递归绑定数据到treeview
      

  4.   

    我的意思是递归datalist 不是treeview 
    用C#在datalist里面递归treeview倒是不错的建议  
    我想知道 如果我在datalist里面递归treeview后如何在每个treeview子节点下加一个datalist下面是我做的datalist嵌套 大家看看 我只是想在每个分类下添加子分类,用递归的方式
    http://www.glcustomer.com.cn/dh/2楼 3楼的我没明白你们再说什么  我的QQ :285233757