对不起,我现在不懂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
那样可以增加灵活性
比如:
数据库1 所有公司的名称
数据库2 所有对应的记录,比如 东北地区,东南地区,西南地区 以及 城市,单位等
数据库1:
ID 公司名称
数据库2:
ParentID(用于递归) description value 'description 用于描述是什么 首先,根据数据库1的ID搜索数据库2所有对应的记录 就会有东北地区,东南地区,西南地区 等
然后,当选中东北地区等时,就根据他们的ParentID搜索数据库2里所有对应的ParentID,就会有城市等
一直这样下去,所有相当有灵活性。
至少我认为。
提示:组件有:QUERY,TABLE,DBGRID,DBSOURCE(能给点具体的做法吗我还不太熟数据库方面)
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
ID,ParentID,……
这两个字段应当在一个表中,这是一个标准的树结构。
比如
ID ParentID
1 -1
2 1
3 1
4 1
5 4
6 4
7 4
8 6
9 6
Select Name From T_Table Where ParentID=4
在你选择一个节点后,如果知道该节点的ID就搞定。
同时你如果使用DevExpress的控件的话,可以看看devDBTree控件,直接就可以和数据库联系上。