以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  BuildTree功能自动过滤了空值问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=71167)

--  作者:supwork
--  发布时间:2015/7/6 15:35:00
--  BuildTree功能自动过滤了空值问题

使用BuildTree功能生成筛选目录树过程中自动过滤了空值,全部取有值的记录生成最终的目录树

 

看起来,目录树很好看,但一点也不中用,客户可能更关注空值

 

你总不能一个筛选目录树,显示所有数据有300条,你把下面的所有显示项全部选中才280行的吧

 

官方也放会说,你限制用户录入所有的数据,不能为空。 不过这个显然不行,有时有些字段字符必定为空值,有些数字必须为0 ,有些日期必须为空

 

值 为空值在有时是合法的,难道用了FT就变得非法的了

 

筛选目录树必须能处理空值 ? 如何处理。


--  作者:大红袍
--  发布时间:2015/7/6 15:38:00
--  

 你可以用sql语句,把空值替换成一个字符,如

 

select iif(第一列 is null, \'空值\', 第一列)

 

 然后再生成dt,再生成目录树。


--  作者:supwork
--  发布时间:2015/7/6 15:46:00
--  

这方案显然不好

 

如果要这样还为如先按官方的做好了,再用程序判断有无空值,有则自动加上。只是多级筛选的时候有点麻烦

 


--  作者:supwork
--  发布时间:2015/7/6 15:49:00
--  

只不过如此一来,还不如自己写代码生成目录树了,官方的功能也就只能睡觉去了

 


--  作者:大红袍
--  发布时间:2015/7/6 15:56:00
--  

非递归,代码

 

Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim Nd = tr.Nodes.Add("全部内容")

Dim dt As DataTable = DataTables("表a")
Dim cs As String = "第一列|第二列"
Dim nds As new List(Of WinForm.TreeNode)
For i As Integer = 0 To 3
    nds.Add(nd)
Next
For Each arys As String() In dt.GetValues(cs, "", cs.Replace("|", ","))
    Dim flag As Boolean = False
    For i As Integer = 0 To arys.Length - 1
        If nds(i+1).Name <> arys(i) OrElse flag Then
            flag = True
            nds(i+1) = nds(i).Nodes.Add(arys(i))
        End If
    Next
Next


--  作者:supwork
--  发布时间:2015/7/6 17:54:00
--  

这段 代码 测试时就产生多个相同的目录树,然后每点一次就加了一个目录树

 

空值 什么都不显示,最好显示为<空值>

 

日期型数据:显示时带时间了00000


--  作者:大红袍
--  发布时间:2015/7/6 17:56:00
--  

 呃,你可以替换掉arys(i)的值,想怎么处理都行。

 

 关键代码 nds(i+1) = nds(i).Nodes.Add(arys(i))