以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]初始不加载动态模拟子表中碰到几个的问题? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=51391) |
||||
-- 作者:jk362223 -- 发布时间:2014/5/26 10:26:00 -- [求助]初始不加载动态模拟子表中碰到几个的问题? 有表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数据不能对应显示。 |
||||
-- 作者:有点甜 -- 发布时间:2014/5/26 10:28:00 -- 把例子传上来。 |
||||
-- 作者:jk362223 -- 发布时间:2014/5/26 10:29:00 -- 没提交附件啊,怎么重复了?不能上传附件? |
||||
-- 作者:Bin -- 发布时间:2014/5/26 10:30:00 -- 上传图片和文件参考这里http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=78 请尽量使用IE,谷歌,火狐等主流浏览器上传. 使用谷歌浏览器必须要先输入一个以上的字符 上传后需要等文件代码出现才算成功!
|
||||
-- 作者:jk362223 -- 发布时间:2014/5/26 10:30:00 --
|
||||
-- 作者:Bin -- 发布时间:2014/5/26 10:37:00 -- .
|
||||
-- 作者:jk362223 -- 发布时间:2014/5/26 11:02:00 -- 是那里出了问题?你发回来好象没改的地方啊? |
||||
-- 作者:Bin -- 发布时间:2014/5/26 11:03:00 -- 改了表BDataColChanged事件 |
||||
-- 作者:jk362223 -- 发布时间:2014/5/26 15:46:00 -- 要是在BeforeLoadInnerTable设置:初始不加载,重启系统后,新加载的表B数据不能对应显示 If e.DataTableName = "表A" Then
e.Filter = "[编号] Is Null" End If If e.DataTableName = "表B" Then e.Filter = "[编号] Is Null" End If |
||||
-- 作者:Bin -- 发布时间:2014/5/26 15:50:00 -- 未发现有问题啊, 图示一下问题所在. |