以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  目录树  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=92095)

--  作者:kaituozhe
--  发布时间:2016/10/26 9:30:00
--  目录树

Dim Filter As String
Dim d1 As Date
Dim d2 As Date
Dim Year As Integer = e.Node.DataRow("年")
Dim dr As DataRow = e.Node.DataRow \'获取生成此节点的行
If e.Node.Text <> "显示所有行" Then
    Select Case e.Node.Level
        Case 0
            Filter = "[公司名称] = \'" & dr("公司名称") & "\'"
        Case 1
            Filter = "[公司名称] = \'" & dr("公司名称") & "\' And [科目编号] = \'" & dr("科目编号") & "\'"
        Case 2
            d1 = New Date(Year,1,1) \'取得该年的第一天
            d2 = new Date(Year,12,31) \'取得该年的最后一天
            Filter = "日期 >= #" & d1 & "# And 日期 <= #" & d2 & "# and [公司名称] = \'" & dr("公司名称") & "\' And [科目编号] = \'" & dr("科目编号") & "\'"
    End Select
End If
Tables("明细分类_table1").Filter = Filter

以上代码是那里错了?点击“显示所有行”时提示如下:

 

.NET Framework 版本:2.0.50727.5485
Foxtable 版本:2016.7.29.1
错误所在事件:窗口,明细分类,TreeView1,NodeMouseClick
详细错误信息:
未将对象引用设置到对象的实例。

 


--  作者:有点蓝
--  发布时间:2016/10/26 9:44:00
--  
目录树是怎么生成的?应该是e.Node.DataRow 是空的
--  作者:kaituozhe
--  发布时间:2016/10/26 9:59:00
--  

那一句代码有问题呀

 


--  作者:kaituozhe
--  发布时间:2016/10/26 10:03:00
--  
那里有问题,怎么改?都没有说清楚呀
--  作者:有点蓝
--  发布时间:2016/10/26 10:13:00
--  
先回答我问题好不好?目录树是怎么生成的?我明确问题在哪才能给你答案!

如果e.Node.DataRow 是空的就加个判断

Dim Filter As String
Dim d1 As Date
Dim d2 As Date
Dim dr As DataRow = e.Node.DataRow \'获取生成此节点的行
if dr is nothing then return
Dim Year As Integer = e.Node.DataRow("年")
If e.Node.Text <> "显示所有行" Then
    Select Case e.Node.Level
        Case 0
....
按理这样的用法e.Node.DataRow 也不会是空的,所以也有可能是触发的其它事件的错误?

最简单的加个代码msgbox(dr is nothing) 也可以自己判断是不是这里的问题

--  作者:kaituozhe
--  发布时间:2016/10/26 11:00:00
--  

Dim cmd As New SQLCom mand
Dim dt As DataTable
cmd.Conne cti
cmd.Comm andText = "Sel ect Distinct Year(日期) As 年, Month(日期) As 月, 公司名称,科目编号,科目名称 From {明细账}"
dt = cmd.Execute Reader()
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree(dt, "公司名称|科目编号|年")
trv.Nodes.Insert("显示所有行",0)
trv.StopRedraw \'停止绘制目录树
For Each nd As WinForm.TreeNode In trv.AllNodes \'遍历所有节点
    If nd.Level = 1 Then \'如果是二级节点
        nd.Text = nd.text & nd.DataRow("科目名称")
    End If
Next
trv.ResumeRedraw

目录树生成的代码

 

 


--  作者:有点蓝
--  发布时间:2016/10/26 11:21:00
--  
Dim Filter As String
Dim d1 As Date
Dim d2 As Date
If e.Node.Text <> "显示所有行" Then
    Dim dr As DataRow = e.Node.DataRow \'获取生成此节点的行
    Dim Year As Integer =dr("年")
    Select Case e.Node.Level
        Case 0
            Filter = "[公司名称] = \'" & dr("公司名称") & "\'"
        Case 1
            Filter = "[公司名称] = \'" & dr("公司名称") & "\' And [科目编号] = \'" & dr("科目编号") & "\'"
        Case 2
            d1 = New Date(Year,1,1) \'取得该年的第一天
            d2 = new Date(Year,12,31) \'取得该年的最后一天
            Filter = "日期 >= #" & d1 & "# And 日期 <= #" & d2 & "# and [公司名称] = \'" & dr("公司名称") & "\' And [科目编号] = \'" & dr("科目编号") & "\'"
    End Select
End If
Tables("明细分类_table1").Filter = Filter

--  作者:kaituozhe
--  发布时间:2016/10/26 11:24:00
--  
可以了,谢谢