以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 目录树筛选 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=12334) |
-- 作者:blackzhu -- 发布时间:2011/8/30 11:00:00 -- 目录树筛选 我在窗口事件里设置这个代码,自动生成目录树: Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1") tr.BuildTree("管理表", "管理项目|客户编号|合同编号") 在目录树的单击按钮中放入此代码: \'Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1") \'Dim s As String = e.Sender.SelectedNode.Text For Each t As Table In Tables If s= t.name Then e.Form.StopRedraw Dim sp As WinForm.SplitContainer sp = e.Form.CreateControl("SplitContainer3", ControlTypeEnum.SplitContainer) e.Form.Controls("SplitContainer2").Panel2.AddControl(sp) sp.Dock = Windows.Forms.DockStyle.Fill sp.BorderStyle=Windows.Forms.BorderStyle.Fixed3D sp.Orientation = System.Windows.Forms.Orientation.Horizontal e.Form.Controls("SplitContainer3").Panel2.Collapsed = True Dim tbl1 As WinForm.Table tbl1 = e.Form.CreateTable("Table1", s,False) e.Form.Controls("SplitContainer3").Panel1.AddControl(tbl1) tbl1.Dock = Windows.Forms.DockStyle.Fill Tables(s).Focus e.form.ResumeRedraw End If Next 我在双击的节点: Dim s As String = e.Sender.SelectedNode.Text For Each t As Table In Tables If s= t.name Then Dim Value()As String Value = e.Node.FullPath.Split("\\") Select Case e.Node.Level Case 0 Tables(s).Filter ="[客户编号] = \'" & Value(0) & "\'" Case 1 Tables(s).Filter ="[客户编号] = \'" & Value(0) & "\' And [合同编号] = \'" & Value(1) & "\'" End Select End If Next 这个筛选不起作用.我要跟着第一个节点筛选客户编号,根据第二个节点筛选合同编号,我把e.Node.FullPath.Split("\\")改成 s.Split("\\")也没有用. 应该怎么修改这个筛选代码?
|
-- 作者:狐狸爸爸 -- 发布时间:2011/8/30 11:13:00 -- messagebox.show(tables(s).Filter) |
-- 作者:blackzhu -- 发布时间:2011/8/30 15:03:00 -- For Each dr As DataRow In DataTables("管理表").DataRows Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1") For Each nd As WinForm.TreeNode In trv.AllNodes If nd.Text.Contains(dr("管理项目")) Then trv.SelectedNode = nd Dim Value()As String Value = e.Node.FullPath.Split("\\") Select Case e.Node.Level Case 1 Tables(Nd.Text).Filter ="[客户名称] = \'" & Value(1) & "\'" Case 2 Tables(Nd.Text).Filter ="[客户名称] = \'" & Value(1) & "\' And [合同编号] = \'" & Value(2) & "\'" End Select End If Next Next 帮我看一下,我这段代码为什么是所有表都筛选,而不是当前表筛选.
|
-- 作者:blackzhu -- 发布时间:2011/8/30 15:50:00 -- 怎么没有回应的? |
-- 作者:狐狸爸爸 -- 发布时间:2011/8/30 16:04:00 -- 估计都和我一样,没有看懂你的代码,不过你的代码肯定不是筛选当前表,你的代码筛选了好多好多好多次:
For Each dr As DataRow In DataTables("管理表").DataRows For Each nd As WinForm.TreeNode In trv.AllNodes Tables(Nd.Text).Filter = “xxx” Next Next
这样的代码,如果有100行,目录树有100个节点,最多就有删选了10000次,至少了筛选了100此,而且表名是nd.text,并不是当前表。 |
-- 作者:blackzhu -- 发布时间:2011/8/30 16:34:00 -- 那老大,Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1") tr.BuildTree("管理表", "管理项目|客户编号|合同编号") 这个代码生成目录树 客户编号和合同编码全部按照"管理项目"列里面的表名来筛选,应该怎么写代码? 生成后就是 表名 客户编号 合同编号 表名是第一个节点,客户编号是第二个节点,合同编号是第三个节点
|
-- 作者:狐狸爸爸 -- 发布时间:2011/8/30 16:36:00 -- 这里有现成的例子:
http://www.foxtable.com/help/topics/0917.htm
|
-- 作者:blackzhu -- 发布时间:2011/8/30 16:50:00 -- 老大我知道现成的例子,我的目录树是动态的,要根据动态生成的表名来筛选! Tables(Nd.Text).Filter ="[客户名称] = \'" & Value(1) & "\'" 就是表名跟着什么走的问题.
|
-- 作者:狐狸爸爸 -- 发布时间:2011/8/30 17:10:00 -- 你的表名肯定不是保存在节点名称中吧?
我建议你用一个public全局变量来保存表名,你根据哪个表名生成的目录树,就将哪个表名保存在全局变量中。 这样只需:
Tables(变量名).Filter = .....
|
-- 作者:blackzhu -- 发布时间:2011/8/30 17:26:00 -- 纠结死了,我改思路了. |