以文本方式查看主题

-  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
--  
纠结死了,我改思路了.