web中将层次数据绑定到TreeView的实现
来源:互联网 发布:ipad2软件下载 编辑:程序博客网 时间:2024/05/19 22:03
开始写xpnsoft的Web代码了,自己对web编程实在不熟悉,涉及到层次数据TreeVIew实现时,参照winform的方法去实现(http://blog.csdn.net/zwq78/archive/2008/05/18/2455889.aspx),但在web中,用继承方法自定义控件并不是件容易的事,只好另写了一个类,用代理的方法将层次数据绑定treeview的代码封装在该类中,程序如下:
Imports System.ComponentModel
Public Class tvCodeItem
Private mValueMember As String
Private mDisplayMember() As String
Private mHasChild As Boolean
Private mPidMember As String
Private mCPtrMember As String
Private mDataTable As DataTable
Private mtv As TreeView
Public Property PidMember() As String
Get
Return mPidMember
End Get
Set(ByVal Value As String)
mPidMember = Value
End Set
End Property
Public Property CPtrMember() As String
Get
Return mCPtrMember
End Get
Set(ByVal Value As String)
mCPtrMember = Value
End Set
End Property
Public Property ValueMember() As String
Get
Return mValueMember
End Get
Set(ByVal Value As String)
mValueMember = Value
End Set
End Property
Public Property DisplayMember() As String
Get
Return Join(mDisplayMember, SPLITSTRING)
End Get
Set(ByVal Value As String)
mDisplayMember = Split(Value, SPLITSTRING)
End Set
End Property
Public Property DataSource() As DataTable
Get
Return mDataTable
End Get
Set(ByVal Value As DataTable)
mDataTable = Value
End Set
End Property
Function GetValue(ByVal r As DataRow) As Object
Return r(mValueMember)
End Function
Function GetDisplay(ByVal r As DataRow) As Object
Dim i As Int32
Dim temp As String = ""
For i = 0 To mDisplayMember.Length - 1
temp = temp & IIf(i > 0, LINKSTRING, "") & r(mDisplayMember(i))
Next
Return temp
End Function
Function GetPid(ByVal r As DataRow) As Object
Return r(mPidMember)
End Function
Function GetCPtr(ByVal r As DataRow) As Boolean
Return r(mCPtrMember)
End Function
Public Shadows Sub Init(ByVal collid As Int32, Optional ByVal dispmember As String = "") ', _
If dispmember = "" Then
dispmember = DefaultShowFields
End If
If collid = 0 Then Exit Sub
If Me.CollectID = collid Then
Exit Sub
End If
Dim dt As DataTable, dtsource As DataTable
Dim filter As String = "collectid=" + collid.ToString
cbase.GetCodeItemDataRows(collid) '并不是进入系统就加载了所有CodeItem,所以需要在每次使用前调用GetCodeItemDataRows
dtsource = cbase.GetDataTable("codeitem")
dt = dtsource.Clone
Dim dr() As DataRow
dr = dtsource.Select(filter)
Dim i As Int32
For i = 0 To dr.Length - 1
dt.ImportRow(dr(i))
Next
With Me
.PidMember = "pid"
.CPtrMember = "cptr"
.DisplayMember = dispmember
.ValueMember = "id"
'要在所有字段成员赋值完成后,再给datasource写入值。
.DataSource = dt
End With
Me.FillTreeNode(Nothing, "pid=0")
Me.CollectID = collid
End Sub
Private Sub FillTreeNode(ByRef pnode As TreeNode, ByVal filter As String)
If pnode Is Nothing Then mtv.Nodes.Clear()
Dim rows As DataRow() = Me.DataSource.Select(filter)
Dim r As DataRow
Dim newnode As myTreeNode
For Each r In rows
newnode = New myTreeNode(GetDisplay(r), GetValue(r), GetPid(r), GetCPtr(r))
newnode.PopulateOnDemand = newnode.CPtr
If pnode Is Nothing Then
mtv.Nodes.Add(newnode)
Else
pnode.ChildNodes.Add(newnode)
End If
Next
End Sub
Private mCollectID As Int32
Public Property CollectID() As Int32
Get
Return mCollectID
End Get
Set(ByVal Value As Int32)
mCollectID = Value
End Set
End Property
Public Sub New(ByVal tv As WebControls.TreeView)
Me.mtv = tv
End Sub
Public Sub TreeNodePopulate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs)
If e.Node.PopulateOnDemand Then
FillTreeNode(e.Node, "pid=" + e.Node.Value.ToString)
End If
End Sub
End Class
客户端调用:
Dim x As New tvCodeItem(Me.tvFilter)
x.Init(collectid)
Me.Session("tvcodeitem") = x
Protected Sub tvFilter_TreeNodePopulate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles tvFilter.TreeNodePopulate
Dim x As tvCodeItem = CType(Me.Session("tvcodeitem"), tvCodeItem)
x.TreeNodePopulate(sender, e)
End Sub
说明:
1、codeitem相当于所有的代码集合(数据字典),进入系统时并不是全部加载,是在需要的时候,从数据库加载(collectID=?)
2、将tv.TreeNodePopulate写在tvcodeitem中不会被触发,只有在客户端调用。
- web中将层次数据绑定到TreeView的实现
- 数据绑定到TreeView
- WPF TreeView 绑定到层次结构数据库
- ASP.NET - 将数据绑定到 TreeView Web 服务器控件
- 一次绑定数据到TreeView
- 递归绑定数据到treeview
- HierarchicalDataTemplate层次模板绑定XML数据源到Menu和TreeView
- DX控件中TreeView绑定层次数据库数据
- treeview的数据绑定递归
- TreeView数据绑定的方法
- TreeView的数据绑定(winForm)
- VB.Net,WinForm中层次数据绑定TreeView的实现
- VB.NET中层次数据绑定TreeView的实现
- TreeView数据绑定的方法(可实现无限递归)
- 将数据库数据绑定到treeview上
- jsp中将数据库中的数据导入到excel的实现
- jsp中将数据库中的数据导入到excel的实现
- jsp中将数据库中的数据导入到excel的实现
- __mt_alloc源码分析(1)
- 今年刚毕业,喜欢CSDN
- 迷茫中,不知路在何方!
- fdfd
- “地震后心理健康指南” 地震灾区群众现在最需要两类志愿者,一类是有医护技能的,一类就是心理专家,至少能很好安慰人。
- web中将层次数据绑定到TreeView的实现
- Ubuntu 8.04 中使用 google toolbar
- C#中的interface,abstract和virtual
- sql server角色,登录,用户
- 我发现的好网址!
- .NET反射、委托技术与设计模式
- error C2664: 'int CListCtrl::InsertColumn(int,LPCTSTR,int,int,int)' : cannot convert parameter 2 from 'const char [7]' to 'LPCTS
- 转贴-《生死不离》-王平久创作 成龙主唱
- 古筝课6