我要做一个程序,其中有一个往来单位的模块:那个这个模块中,要对往来单位进行分类。比如说:一个企业的往来单位分为:东北地区,东南地区,西南地区,而东北地区又包括一些城市,而一个城市又分别包括一些单位。每个单位下可能还含有一些部门。我的意思是,你怎么样做到把这些东西分出来。
比如说,我只有一个界面,第一次界面上显示是第一级的目录, 
当我选取中第一级内容的某一条记录时,界面上显示出这个单位下的内容。

解决方案 »

  1.   

    用TreeView结合数据库不就行了
      

  2.   

    我认为用递归来做
    那样可以增加灵活性
    比如:
       数据库1   所有公司的名称
       数据库2   所有对应的记录,比如   东北地区,东南地区,西南地区  以及   城市,单位等
       数据库1:
         ID    公司名称   
    数据库2:
         ParentID(用于递归)   description   value      'description   用于描述是什么    首先,根据数据库1的ID搜索数据库2所有对应的记录   就会有东北地区,东南地区,西南地区 等
    然后,当选中东北地区等时,就根据他们的ParentID搜索数据库2里所有对应的ParentID,就会有城市等
    一直这样下去,所有相当有灵活性。
    至少我认为。
      

  3.   

    是啊我认为第二位和我的想法很相似哎,而且我也感觉应该这么做灵活很多,那就是我应该用多重数据查询并根据一定的索引来进行连接对吗
    提示:组件有:QUERY,TABLE,DBGRID,DBSOURCE(能给点具体的做法吗我还不太熟数据库方面)
      

  4.   

    对不起,我现在不懂DELPHI,以下是用VB。NET做的
        Dim AllData As DataSet
        Dim tmp As DataView    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            AllData = New DataSet()
        End Sub    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim tmpdataadapter As OleDbDataAdapter        tmpdataadapter = New OleDbDataAdapter("select * from contactors", "Provider=Microsoft.Jet.OLEDB.4.0;Password='';User ID=Admin;Data Source=F:\programmer\FREESoftware\IE\database.mdb;Mode=Share Deny None;Extended Properties='';Jet OLEDB:System database='';Jet OLEDB:Registry Path='';Jet OLEDB:Database Password='';Jet OLEDB:Engine Type=4;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password='';Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False")
            tmpdataadapter.Fill(AllData, "contactors")        tmp = AllData.Tables(0).DefaultView
            DataGrid1.DataSource = tmp
        End Sub    Private Sub DataGrid1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.DoubleClick
            Dim i As Integer
            For i = 0 To Me.DataGrid1.VisibleRowCount - 1
                If Me.DataGrid1.IsSelected(i) Then
                    Dim tmpcell As New DataGridCell()
                    Dim reti As Object                tmpcell.RowNumber = i
                    tmpcell.ColumnNumber = 0
                    reti = DataGrid1.Item(tmpcell)
                    tmp.RowFilter = "ParentID=" & Convert.ToInt32(reti).ToString
                    Me.DataGrid1.Refresh()
                    Exit For
                End If
            Next    End Sub
      

  5.   

    数据库中应当这样:
    ID,ParentID,……
    这两个字段应当在一个表中,这是一个标准的树结构。
    比如
    ID  ParentID
    1   -1
    2  1
    3  1
    4  1
    5  4
    6  4 
    7  4
    8  6
    9  6
      

  6.   

    然后使用Sql语句就可以了
    Select Name From T_Table Where ParentID=4
    在你选择一个节点后,如果知道该节点的ID就搞定。
    同时你如果使用DevExpress的控件的话,可以看看devDBTree控件,直接就可以和数据库联系上。
      

  7.   

    为什么不用DATASET,他会有速度优势。