Foxtable(狐表)用户栏目专家坐堂 → 目录树筛选


  共有9708人关注过本帖树形打印复制链接

主题:目录树筛选

帅哥哟,离线,有人找我吗?
blackzhu
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
目录树筛选  发帖心情 Post By: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("\")也没有用.

  应该怎么修改这个筛选代码?

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/8/30 11:13:00 [只看该作者]

messagebox.show(tables(s).Filter)

 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By: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
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/8/30 15:50:00 [只看该作者]

怎么没有回应的?

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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
  6楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/8/30 16:34:00 [只看该作者]

那老大,Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
tr.BuildTree("管理表", "管理项目|客户编号|合同编号")

 这个代码生成目录树

客户编号和合同编码全部按照"管理项目"列里面的表名来筛选,应该怎么写代码?
生成后就是
  表名
    客户编号
       合同编号

            表名是第一个节点,客户编号是第二个节点,合同编号是第三个节点

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/8/30 16:36:00 [只看该作者]

这里有现成的例子:

 

http://www.foxtable.com/help/topics/0917.htm

 


 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  8楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/8/30 16:50:00 [只看该作者]

老大我知道现成的例子,我的目录树是动态的,要根据动态生成的表名来筛选!

 Tables(Nd.Text).Filter ="[客户名称] = '" & Value(1) & "'"   就是表名跟着什么走的问题.

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/8/30 17:10:00 [只看该作者]

你的表名肯定不是保存在节点名称中吧?

 

我建议你用一个public全局变量来保存表名,你根据哪个表名生成的目录树,就将哪个表名保存在全局变量中。

这样只需:

 

Tables(变量名).Filter = .....

 

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  10楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/8/30 17:26:00 [只看该作者]

纠结死了,我改思路了.

 回到顶部
总数 14 1 2 下一页