以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教目录树问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=107326)

--  作者:13968559581
--  发布时间:2017/9/26 8:46:00
--  请教目录树问题
本人通过人员表,生成某加载树
Dim cmb1 As WinForm.ComboBox = e.Form.Controls("ComboBox1")
Dim ryxxb As DataTable
cmd.C
cmd.CommandText="select * f rom  v_OA_a01 where 部门名称 like \'TZXJ%\'"
ryxxb=cmd.ExecuteReader
Tables("员工表_ryxxb").DataSource =ryxxb
cmb1.ComboList=ryxxb.GetComboListString("工号")


Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree(ryxxb,"部门名称|姓名")
trv.Nodes.Insert("全部",0)


想选取目录树某几行的时候,在表里选择相应的人员
For Each nd As WinForm.TreeNode In e.node.AllNodes  \'同步子节点选中状态
    If nd.FullPath.StartsWith(e.node.FullPath) Then
        nd.Checked = e.node.Checked
    End If
Next
If e.node.Checked = False Then \'如果本次操作为清除节点选中状态
    Dim pd As WinForm.TreeNode = e.node.ParentNode \'获取父节点
    Do While pd IsNot Nothing
        pd.Checked = False \'清除父节点选中状态
        pd  = pd.ParentNode \'继续获取上一层级的父节点
    Loop
End If

Dim cmd As new SQLCommand
Dim ryxxb As DataTable
cmd.C
Dim Filter As String
Dim gh As String
If e.node.Text = "全部" Then
    cmd.CommandText="select * f rom  v_OA_a01 where 部门名称 like \'TZXJ%\'"
Else
    Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
    Dim dr As DataRow
    For Each nd As WinForm.TreeNode In trv.AllNodes
        dr=nd.DataRow
                If  nd.Checked = True Then
                    gh=gh & "\'" & dr("工号") & "\',"
                End If
    Next
  gh=gh.Trim(",")
  MessageBox.show(gh)
  If gh>"" Then
  cmd.CommandText="select * fr om  v_OA_a01 where 工号 in (" & gh & ")"
  Else
  cmd.CommandText="select * fr om  v_OA_a01"
   End If
End If

ryxxb=cmd.ExecuteReader
Tables("员工表_ryxxb").AutoSizeCols
Tables("员工表_ryxxb").DataSource =ryxxb

问题有二:
一、我这样设计是否合理
二、当我在目录树选择一个或几个人的时候,右边会出现相应的人员了,但是当我去掉所有选择的时候,报错
.NET Framework 版本:2.0.50727.5485
Foxtable 版本:2017.6.12.1
错误所在事件:窗口,员工表,TreeView1,AfterCheckNode
详细错误信息:
未将对象引用设置到对象的实例。

请指教

--  作者:狐狸爸爸
--  发布时间:2017/9/26 9:12:00
--  
设计思路有问题,生成一个目录树的时候就加载了所有数据,这样设计动态加载的意义何在? 你不如改成筛选树!
还有帮助文件的动态加载从来不会这样:

ryxxb=cmd.ExecuteReader
Tables("员工表_ryxxb").DataSource =ryxxb

你这样的设计是从哪里学来的?

帮助文件的动态加载简单快捷。

1、看看目录树是怎么生成的:
看看帮助是怎么生成目录树的? 用了distinct关键词,只加载生成目录树的列。

2、这段帮助虽然用的是主表作为例子,但是一样适用SQLTable,你采用SQLTable,Select语句改为:select * f rom  v_OA_a01 where 部门名称 Where [主键列名] Is Null.
接下来就和帮助一样:

.....
合成条件的代码
DataTables("员工表_ryxxb").LoadFilter = 合成的条件
DataTables("员工表_ryxxb").Load()




[此贴子已经被作者于2017/9/26 9:27:26编辑过]

--  作者:有点甜
--  发布时间:2017/9/26 9:18:00
--  

 如果报错,那就定位一下错误

 

http://www.foxtable.com/webhelp/scr/1485.htm

 

 如果自己处理不了,就做个例子发上来


--  作者:狐狸爸爸
--  发布时间:2017/9/26 9:21:00
--  
如果你不想改动,继续一开始加载所有数据,那就弄成目录树筛选即可:
http://www.foxtable.com/webhelp/scr/0917.htm

--  作者:13968559581
--  发布时间:2017/9/26 12:11:00
--  再请教

图片点击可在新窗口打开查看此主题相关图片如下:日本报错.png
图片点击可在新窗口打开查看
我窗口登录后显示,是想这个时候能显示全部人员啊
我在窗口中有两个控件,左边是目录树,右边是表
当我选择左边人员的时候,右边筛选出相应的人员,这种思路有问题?
再请教,谢谢

图片点击可在新窗口打开查看此主题相关图片如下:人员选择.png
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间:2017/9/26 12:13:00
--  

 如果报错,那就定位一下错误

 

http://www.foxtable.com/webhelp/scr/1485.htm

 

 如果自己处理不了,就做个例子发上来