2016-03-17 76 views
-2
两个表一个TreeView

你好,我有这样的两个表:填充用vb.net

ID

enter image description here

subDepartment table

然后我用树状想要这个结果部门类别

  • 1 MIS系统 1 MIS网络 1 MIS程序员
  • 2审计活动 2审计DS
  • 3 HRD PA 3 HRD PayBen HRD PS 3 HRD PLD
  • 4会计事务代表 4会计快速消费品
  • 5采购NULL

或这样

  • MIS

-System
-Networking
-Programmer

  • AUDIT
    -operations
    -DS

  • HRD
    -PA
    -PayBen
    -PS
    -PLD

  • Acounting
    -Sup
    -FMCG

可有人请指导我,谢谢。我无法在互联网上找到任何解决方案,而且我是vb.net语言的新手。

回答

0

在我的代码下面,我给你的逻辑。你只需要现在查询你的表格。

如果您需要说明,请告诉我。

TreeView1.Nodes.Clear() 

    'Create a first node and select it 
    Dim root As TreeNode = TreeView1.Nodes.Add("Test") 
    TreeView1.SelectedNode = root 

    'Create two types of node 
    Dim department As New TreeNode() 
    Dim category As New TreeNode() 

    'Daos (if you create a Department class and subDepartment class) 
    Dim _daoD As New Departments(_cnx) 
    Dim _daoSD As New subDepartments(_cnx) 

    'Lists (depending on classes too) 
    Dim listD As List(Of Department) 
    Dim listSD As List(Of subDepatment) 

    For Each dep As Department In listD 
     'Add a Tree node for a new department 
     department = New TreeNode(dep.department) 
     department.Tag = dep.id 
     root.Nodes.Add(department) 
     TreeView1.SelectedNode = departement 

     For Each subDep As subDepartment In listSubDep 
      'Add a TreeNode for new categories 
      categ = New TreeNode(subDep.category) 
      categ.Tag = subDep.id 
      Nodes.Add(categ) 
     Next 
    Next 

然后,您可以创建4个等级(第一个具有属性,而第二个表中查询)

Public Class Department 
    'properties 
     Public Property id As Integer 
     Get 
      Return _ID 
     End Get 
     Set(ByVal Value As Integer) 
      _ID = Value 
     End Set 
    End Property 
    'etc 
End Class 

Public Class Departments 
    Dim _cnx As OracleConnection (if you use Oracle) 
    Public Sub New(ByVal pcnx As OracleConnection) 
     _cnx = pcnx 
    End Sub 

    'Your queries 
End Class 
+0

你好nbadaud,感谢你的快速回复,即时通讯使用vb.net 2008这是你给我的代码是不适用的。比如“.tag”或者有两个公开课。也是,我需要对代码的一点解释。希望你的回复。非常感谢。 – Jan

+0

你在代码中不理解什么? – nbadaud

+0

不知何故,我没有得到整个代码,但幸运的是我解决了它。再次感谢你。 – Jan

0

这里是我的搜索解决方案。我希望这会帮助有这种问题的人。

昏暗myConnString的String = “数据源=名称;初始目录=数据库;集成安全性=真” 昏暗daMyName作为新的SqlDataAdapter 昏暗dsMyName作为新的数据集 昏暗RECCOUNT作为整数 昏暗mySelectQuery的String =“SELECT DEPARTMENT.department,从subdept subDept.category右连接上.department.id = subDept.parent” 昏暗MyConnection的作为新的SqlConnection(myConnString) 昏暗mycommand的作为新的SqlCommand(mySelectQuery,MyConnection的) myConnection.Open() daMyName部门.SelectCommand = myCommand daMyName.Fill(dsMyName) Dim tbl As D ataTable = dsMyName.Tables(0) RECCOUNT = dsMyName.Tables(0).Rows.Count tvw1.Nodes.Clear()“清除的任何节点,所以我们不一棵树上加载到树

Dim nd As TreeNode 
    nd = tvw1.Nodes.Add("DEPARTMENT") 
    Dim parentRow As DataRow 

    Dim rowNdx As Integer 
    rowNdx = 0 
    daMyName.Fill(tbl) 
    Dim Jan As String 
    For Each parentRow In tbl.Rows 
     If rowNdx = recCount Then 
      Exit For 
     End If 
     Jan = dsMyName.Tables(0).Rows(rowNdx)("Department").ToString() 'set the next name 
     Dim Dnode As TreeNode 
     Dnode = tvw1.Nodes.Add(dsMyName.Tables(0).Rows(rowNdx)("department").ToString()) 
     Dim cnode As TreeNode 
     cnode = New TreeNode 
     Do While dsMyName.Tables(0).Rows(rowNdx)("department").ToString() = Jan And rowNdx < recCount 
      'if it changes we need to kick out of Do While 
      cnode = Dnode.Nodes.Add(dsMyName.Tables(0).Rows(rowNdx)("category").ToString()) 
      rowNdx = rowNdx + 1 
      If rowNdx = recCount Then 
       Exit Do 
      End If 
     Loop 
    Next parentRow 
    myConnection.Close()