ASP.net 2005 Treeview 无限分类非递归终极解决方案

ASP.net 2005 Treeview 无限分类非递归终极解决方案

这几天在写HRM的时候 这问题搞了我两天,哈哈!开始在使用Google 找了半天都是一堆垃圾,都是使用算法的较多, 后来就去了www.asp.net 找到点启示。

好了废话多说无用。

首先表结构如下 表名 Test

<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 233.25pt; HEIGHT: 95.25pt" type="#_x0000_t75"><imagedata src="file:///D:%5CDOCUME~1%5CJIANGJ~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.jpg" o:title="Snap1"></imagedata></shape>

ASP.net 2005 Treeview 无限分类非递归终极解决方案

写个存储过程 GetTreeview

这个不用我说了吧下面用到

为了速度缓存DataTable

Public Function GetTreeTable() As DataTable

Dim dt As New DataTable()

dt = HttpContext.Current.Cache("Treeview")

If dt Is Nothing Then

Dim <state w:st="on"><place w:st="on">Conn</place></state>As New SqlConnection

Dim clsConnDatabase As New ConnectionDatabase

<state w:st="on"><place w:st="on">Conn</place></state> = clsConnDatabase.ConnDatabase

Dim Command As New SqlCommand

Command.Connection = <state w:st="on"><place w:st="on">Conn</place></state>

Command.CommandText = "GetTreeview"

Command.CommandType = CommandType.StoredProcedure

Command.ExecuteNonQuery()

Dim da As New SqlDataAdapter(Command)

dt = New DataTable()

da.Fill(dt)

HttpContext.Current.Cache.Insert("Treeview", dt)

End If

Return dt

End Function

这里是主要阿

Public Sub PopulateNodes(ByVal nodes As TreeNodeCollection, Optional ByVal intParentID As Int32 = 0)

Dim dt As New DataTable()

dt = clsWebForms.GetTreeTable()

Dim strExpression As String

strExpression = "[parentID] = " & intParentID

Dim foundRows() As DataRow

foundRows = dt.Select(strExpression)

Dim I As Integer

For I = 0 To foundRows.GetUpperBound(0)

Dim tn As New TreeNode()

tn.Text = foundRows(I).Item(TableName).ToString()

tn.Value = foundRows(I).Item("ID").ToString()

Dim dr() As DataRow

dr = dt.Select("[parentID] = " & tn.Value)

If dr.GetUpperBound(0) > -1 Then

tn.PopulateOnDemand = True

End If

nodes.Add(tn)

Next

End Sub

建立WebForm 放入Treeview

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

If Not Page.IsPostBack Then

PopulateNodes(TreeView1.Nodes, 0)

End If

End Sub

Protected Sub TreeView1_TreeNodePopulate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles TreeView1.TreeNodePopulate

PopulateNodes(e.Node.ChildNodes, e.Node.Value)

End Sub

至于速度我没测试,如果大家有兴趣帮忙测测。

题外话(突然发现自己老了,26岁了写了快7年的程序了 一直使用VB各种版本, MasmMS宏汇编语言)在VB 6.0 时代 2000 年左右建立了 VB 编程为主的个人主页编程浪子) by Shadow

注:本文转自http://blog.csdn.net/shadowsky/archive/2006/06/18/811461.aspx

你可能感兴趣的:(.net,asp.net,asp,vb,VB.NET)