请用过TREEVIEW的朋友指点一下
我现在需要做一个 树型结构 大概就是一个合同下有几个小合同 小合同又可生成别的合同 以此类推,开始我用HIERARGRID 控件做但效果不理想,要事先指定层数无法动态生成.
现在我想用TREEVIEW控件做这个东西,不知道哪位朋友有这方面的经验 如连接数据, 如何用TREEVIEW显示数据内容 以及如何写STORE PROCEDURE
在这里先谢了
问题点数:20、回复次数:7Top
1 楼Snrmnm_sx(Ψ 踏雪无痕 Ω)回复于 2005-06-02 23:51:29 得分 20
Dim Ds As New DataSet
Dim Tb As New DataTable
'Dim Ad As New Microsoft.Data.Odbc.OdbcDataAdapter
Dim ad As New System.Data.OleDb.OleDbDataAdapter
Dim Dwdm_Pub1 As String
Dim Row_Pub As Integer
Public Data_Conn As New System.Data.OleDb.OleDbConnection
Dim Parent_P As TreeNode
Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
Dim Text0, F1 As String
Dim i As Integer
Try
Parent_P = e.Node
Text0 = e.Node.Text
If Text0 <> "根目录" Then
i = InStrRev(Text0, ")")
Text0 = Mid(Text0, 2, i - 2)
i = 0
Do While i < Tb.Rows.Count
If Tb.Rows(i)("DWDM") = Text0 Then
Row_Pub = i
DWDM.Text = Tb.Rows(i)("DWDM")
DWMC.Text = Tb.Rows(i)("DWMC")
DWDZ.Text = Tb.Rows(i)("DWDZ")
IPADD.Text = Tb.Rows(i)("IPADD")
EMAIL.Text = Tb.Rows(i)("EMAIL")
CZH.Text = Tb.Rows(i)("CZH")
LXR.Text = Tb.Rows(i)("LXR")
DHHM.Text = Tb.Rows(i)("DHHM")
YZBM.Text = Tb.Rows(i)("YZBM")
XX.Text = Tb.Rows(i)("XX")
YB.Text = Tb.Rows(i)("YB")
Dwdm_Pub1 = DWDM.Text
Button3.Enabled = True
Button4.Enabled = True
Button1.Enabled = False
DWDM.Enabled = False
End If
i = i + 1
Loop
Else
Dwdm_Pub1 = ""
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, "提示")
End Try
End Sub
Private Sub Dwxx_Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Str0 As String
Dim k1 As Integer
Data_Conn.ConnectionString = "Jet OLEDB:Database Password=DWDD;Provider=Microsoft.Jet.OLEDB.4.0;Data source=D:\DWDD.MDB" ';password=DWDD"
TreeView1.Nodes.Clear()
Dim newNode As TreeNode = New TreeNode("根目录")
Try
Str0 = "select * from DWXX order by LEN(DWDM)+DWDM"
' Ad.SelectCommand = New Microsoft.Data.Odbc.OdbcCommand(Str0, Data_Conn)
ad.SelectCommand = New System.Data.oledb.OleDbCommand(Str0, Data_Conn)
Dim Adc As System.Data.Oledb.OleDbCommandBuilder = New System.Data.oledb.OleDbCommandBuilder(ad)
ad.Fill(Ds, "DWXX")
Tb = Ds.Tables("DWXX")
TreeView1.Nodes.Add(newNode)
newNode.ExpandAll()
k1 = Dis_Tree(newNode)
TreeView1.ExpandAll()
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, "提示")
End Try
End Sub
Private Sub PrintRecursive(ByVal n As TreeNode, ByVal Dm As String)
Dim Text1 As String
Dim i As Integer
Text1 = n.Text
If Text1 = "根目录" Then
Text1 = ""
Else
i = InStrRev(Text1, ")")
Text1 = Mid(Text1, 2, i - 2)
End If
If Text1 = Dm Then
Parent_P = n
Else
Dim aNode As TreeNode
For Each aNode In n.Nodes
PrintRecursive(aNode, Dm)
Next
End If
End Sub
Top
2 楼Snrmnm_sx(Ψ 踏雪无痕 Ω)回复于 2005-06-02 23:51:56 得分 0
接上楼的!
Private Sub CallRecursive(ByVal Dm As String)
Dim n As TreeNode
For Each n In TreeView1.Nodes
PrintRecursive(n, Dm)
Next
End Sub
Private Function Dis_Tree(ByVal Node As TreeNode) As Integer
Dim L, i, j As Integer
Dim Dm0, Dm1, Text0 As String
Dim Len0 As Integer
Dim Newnode1 As TreeNode
L = 0
For i = 0 To Tb.Rows.Count - 1
Dm0 = Tb.Rows(i)("DWDM")
Len0 = Len(Tb.Rows(i)("DWDM"))
If Len0 = L + 2 Then
Text0 = "(" + Dm0 + ")" + Tb.Rows(i)("DWMC")
Newnode1 = New TreeNode(Text0)
Node.Nodes.Add(Newnode1)
Else
'查找父节点
Dm1 = Mid(Dm0, 1, Len0 - 2)
CallRecursive(Dm1)
Text0 = "(" + Dm0 + ")" + Tb.Rows(i)("DWMC")
Newnode1 = New TreeNode(Text0)
Parent_P.Nodes.Add(Newnode1)
End If
Next
Dis_Tree = 1
End Function
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Data_Conn.Close()
Close()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim Text0 As String
Tb.Rows(Row_Pub)("DWDM") = DWDM.Text
Tb.Rows(Row_Pub)("DWMC") = Trim(DWMC.Text)
Tb.Rows(Row_Pub)("DWDZ") = DWDZ.Text
Tb.Rows(Row_Pub)("IPADD") = IPADD.Text
Tb.Rows(Row_Pub)("EMAIL") = EMAIL.Text
Tb.Rows(Row_Pub)("CZH") = CZH.Text
Tb.Rows(Row_Pub)("LXR") = LXR.Text
Tb.Rows(Row_Pub)("DHHM") = DHHM.Text
Tb.Rows(Row_Pub)("YZBM") = YZBM.Text
Tb.Rows(Row_Pub)("XX") = XX.Text
Tb.Rows(Row_Pub)("YB") = YB.Text
ad.Update(Ds, "DWXX")
Text0 = "(" + DWDM.Text + ")" + DWMC.Text
TreeView1.SelectedNode.Text = Text0
Button3.Enabled = False
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'Tb.Rows(Row_Pub)("DWDM") = DWDM.Text
DWMC.Text = ""
DWDZ.Text = ""
IPADD.Text = ""
EMAIL.Text = ""
CZH.Text = ""
LXR.Text = ""
DHHM.Text = ""
YZBM.Text = ""
XX.Text = ""
YB.Text = ""
DWDM.Enabled = True
Button1.Enabled = True
End Sub
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Dm0, Mc0, Text0 As String
Dim Len0, i As Integer
Dm0 = DWDM.Text
Mc0 = Trim(DWMC.Text)
Len0 = Len(Dm0)
If Len0 <> Len(Dwdm_Pub1) + 2 Or Len0 > 10 Then
MsgBox("子节点的代码长度应为父节点代码长度加2且总长度不能大于10!", MsgBoxStyle.Information, "提示")
Exit Sub
End If
If Mid(Dm0, 1, Len0 - 2) <> Dwdm_Pub1 Then
MsgBox("你新增的单位信息不是本单位的下级单位信息!", MsgBoxStyle.Information, "提示")
Exit Sub
End If
For i = 0 To Tb.Rows.Count - 1
If Tb.Rows(i)("DWDM") = Dm0 Or Tb.Rows(i)("DWMC") = Mc0 Then
MsgBox("此单位信息已经输入!", MsgBoxStyle.Information, "提示")
Exit Sub
End If
Next
Try
Dim Row1 As DataRow
Dim Newnode1 As TreeNode
Row1 = Tb.NewRow
Row1("DWDM") = DWDM.Text
Row1("DWMC") = Trim(DWMC.Text)
Row1("DWDZ") = DWDZ.Text
Row1("IPADD") = IPADD.Text
Row1("EMAIL") = EMAIL.Text
Row1("CZH") = CZH.Text
Row1("LXR") = LXR.Text
Row1("DHHM") = DHHM.Text
Row1("YZBM") = YZBM.Text
Row1("XX") = XX.Text
Row1("YB") = YB.Text
Tb.Rows.Add(Row1)
ad.Update(Ds, "DWXX")
Text0 = "(" + DWDM.Text + ")" + DWMC.Text
Newnode1 = New TreeNode(Text0)
Parent_P.Nodes.Add(Newnode1)
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, "提示")
End Try
Button1.Enabled = False
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim i As Integer
Dim Text0 As String
Dim Parent0 As TreeNode
Try
Text0 = Parent_P.Text
If Text0 = "根目录" Then
Exit Sub
End If
If Parent_P.GetNodeCount(True) > 0 Then
MsgBox("本节点有子节点不能删除!", MsgBoxStyle.Information, "提示")
Exit Sub
End If
If MsgBox("是否确定要删除节点:" + Text0, MsgBoxStyle.YesNo, "提示") = MsgBoxResult.Yes Then
Parent0 = Parent_P.Parent
For i = 0 To Tb.Rows.Count - 1
If Tb.Rows(i)("DWDM") = Dwdm_Pub1 Then
Tb.Rows(i).Delete()
End If
Next
ad.Update(Ds, "DWXX")
Parent0.Nodes.Remove(Parent_P)
Button4.Enabled = False
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, "提示")
End Try
End SubTop
3 楼KahnWinsock(卡恩)回复于 2005-06-02 23:53:18 得分 0
怎么还用写存储过程呢?有什么浏览合同之外的需求吗?
想加树,很容易,首先你得有一个结构合理的表装合同,名列如下:
合同编号 合同名称 上级合同编号
有了这个表之后,利用递归算法,把合同填加到树上。提醒一下,如果一下子有329个合同以上的话,填树会有点慢。
如果同意我的表结构,那我可以再补上填树的方法。Top
4 楼qgqchile(qgq)回复于 2005-06-03 01:00:34 得分 0
先多谢各位热心人了受益非浅
有没有给WEB 做的?
对于数据库还是有一点小要求的,有的合同下只能跟合同,有的合同下可以加工作人员,工作人员不会再有下层了,这样的话我就需要两个TABLE 一个合同的另一个人员的
Top
5 楼qgqchile(qgq)回复于 2005-06-03 01:03:06 得分 0
KahnWinsock(卡恩)
你的那个结构很适合我的情况,不知道在WEB 下如何将树加进去
多谢了,VB 或C#的代码都可以接受,Top
6 楼Snrmnm_sx(Ψ 踏雪无痕 Ω)回复于 2005-06-03 01:10:19 得分 0
在WEB下只能加载页面!
1.你可以用脚本来实现
<iewc:TreeNode NavigateUrl="aaaa.aspx" Text="*****" Target="bbbbbb"></iewc:TreeNode>
aaaa.aspx 是你要加载的页面
bbbbbb是你要加载到什么地方
*****是这个节点的方本
2.也可以用
Dim cnd As New TreeNode
cnd.id=……‘你已经知道ID了!
cnd.NavigateUrl = "AAAA.aspx"
Top
7 楼tihua(告诉我吧)回复于 2005-06-03 08:39:46 得分 0
路过Top




