有表A,表B.表A的DataColChanged设置If e.DataCol.Name = "姓名" AndAlso e.DataRow.IsNull("姓名") = False Then e.DataRow("标识") = GetPy(e.DataRow("姓名"), True)
End If
Select Case e.DataCol.Name
Case "姓名","标识"
Dim Filter As String = "[编号] = '" & e.DataRow("编号") & "'"
DataTables("表B").ReplaceFor(e.DataCol.Name, e.NewValue, Filter)
End Select
表B的DataColChanged设置
If e.DataCol.Name = "编号" Then
If e.NewValue Is Nothing Then
e.DataRow("标识") = Nothing
e.DataRow("姓名") = Nothing
Else
Dim dr As DataRow
dr = DataTables("表A").Find("[编号] = '" & e.NewValue & "'")
If dr IsNot Nothing
e.DataRow("标识") = Nothing
e.DataRow("姓名") = Nothing
End If
End If
End If
表B的DataRowAdded设置
If CurrentTable.Name = "窗口1_Table2" Then
e.DataRow("编号") = Tables("表A").Current("编号")
End If
表B的CurrentChanged设置
If e.Table.Name = "表B" Then
If Forms("窗口1").Opened AndAlso Tables.Contains("窗口1_Table2") Then '如果窗口已经打开
Dim dr As DataRow = e.Table.Current.DataRow
Dim wz As Integer = Tables("窗口1_Table2").FindRow(dr)
If wz >=0 Then
Tables("表B").Position = wz
End If
End If
Else If e.Table.Name = "窗口1_Table2" Then
Dim dr As DataRow = e.Table.Current.DataRow
Dim wz As Integer = Tables("表B").FindRow(dr)
If wz >=0 Then
Tables("表B").Position = wz
End If
End If
在项目事件BeforeLoadInnerTable
If e.DataTableName = "表A" Then
e.Filter = "[编号] Is Null"
End If
If e.DataTableName = "表B" Then
e.Filter = "[编号] Is Null"
End If
设置窗口1,加一个按钮设置
Dim tbl As WinForm.Table
tbl = e.Form.CreateTable("Table2", "表B", True)
tbl.SetBounds(161, 225, 588, 250)
e.Form.AddControl(tbl)
Tables("窗口1_Table2").SetColVisibleWidth("编号|98|标识|98|姓名|98")
If Forms("窗口1").Controls.Contains("Table2") Then
Dim t As Table = Tables("窗口1_Table2")
With Tables("表A")
If .Current Is Nothing Then
t.Filter = "False"
Else
t.Filter = "编号 = '" & .Current("编号") & "'"
End If
End With
End If
加一个Table1绑定表A,为副表
加一个TreeView1,NodeMouseDoubleClick设置
Dim Filter As String
If e.Node.Text = "加载所有数据" Then
Filter = ""
Else
Dim Value() As String
Value = e.Node.FullPath.Split("\")
Select Case e.Node.Level
Case 0
Filter ="[标识] = '" & Value(0) & "'"
Case 1
Filter ="[标识] = '" & Value(0) & "' And [姓名] = '" & Value(1) & "'"
End Select
End If
DataTables("表A").LoadFilter = Filter
DataTables("表A").Load()
在窗口AfterLoad设置
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.CommandText = "SELECT DISTINCT 标识,姓名 From {表A}"
dt = cmd.ExecuteReader()
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree(dt,"标识|姓名")
trv.Nodes.Insert("加载所有数据",0)
这样一路设置下来,想达到:初始不加载,动态表B的副表做表A的子表,通过加载树加载表A的数据,子表B的副表对应加载,并自动引用表A的“标识”“姓名”,
现在的问题是1、不能自动引用表A的“标识”“姓名”。2、重启系统后,新加载的表B数据不能对应显示。