以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  CurrentChanged  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=90625)

--  作者:huhu
--  发布时间:2016/9/18 16:46:00
--  CurrentChanged
当需求明细表为空的时候就会报下面的错误。
.NET Framework 版本:2.0.50727.7905
Foxtable 版本:2016.7.29.1
错误所在事件:临时版本跟踪表,CurrentChanged
详细错误信息:
未将对象引用设置到对象的实例。

CurrentChanged代码
If DataTables("需求明细表").Find("需求编号 = \'" & e.Table.Current("需求编号") & "\'") Is Nothing Then
    DataTables("需求明细表").AppendLoad("需求编号 = \'" & e.Table.Current("需求编号") & "\'")
End If

--  作者:有点蓝
--  发布时间:2016/9/18 17:13:00
--  
if e.Table.Current isnot nothing then
If DataTables("需求明细表").Find("需求编号 = \'" & e.Table.Current("需求编号") & "\'") Is Nothing Then
    DataTables("需求明细表").AppendLoad("需求编号 = \'" & e.Table.Current("需求编号") & "\'")
End If
endif

--  作者:huhu
--  发布时间:2016/9/18 17:21:00
--  
还是报同样的错。
--  作者:有点蓝
--  发布时间:2016/9/18 17:29:00
--  
那就不只是这里的代码问题,检查是否触发了其它事件
--  作者:huhu
--  发布时间:2016/9/18 17:34:00
--  
我就是加载表。如果筛选出来的是空表就会报上面的错。
按钮代码
Dim kh As WinForm.ComboBox = e.Form.Controls("客户")
Dim bdjx As WinForm.ComboBox = e.Form.Controls("博达机型")
Dim startdate As WinForm.DateTimePicker = e.Form.Controls("DateTimePicker1")
Dim enddate As WinForm.DateTimePicker = e.Form.Controls("DateTimePicker2")
If User.Name.Trim() = "jichenggang@bdcom.com.cn" Or  User.Name.Trim() = "liujiyong@bdcom.com.cn" Then
    Dim filter = DataTables("临时版本跟踪表").LoadFilter
    If filter > "" Then filter &= " and "
    If kh.text = ""  And bdjx.text = "" Then
        DataTables("临时版本跟踪表").LoadFilter = filter & "需求提交时间 > \'" & startdate.Value & "\' And 需求提交时间 < \'"  & enddate.value.AddDays(1) & "\'"
    ElseIf kh.text <> "" And bdjx.text <> "" Then
        DataTables("临时版本跟踪表").LoadFilter = filter & "需求提交时间 > \'" & startdate.Value & "\' And 需求提交时间 < \'"  & enddate.value.AddDays(1) & "\' and  客户 = \'" & kh.text & "\' and 博达机型 = \'" & bdjx.text & "\'"
    ElseIf kh.text <> "" And bdjx.text = "" Then
        DataTables("临时版本跟踪表").LoadFilter = filter & "需求提交时间 > \'" & startdate.Value & "\' And 需求提交时间 < \'"  & enddate.value.AddDays(1) & "\' and  客户 = \'" & kh.text & "\'"
    ElseIf kh.text = "" And bdjx.text <> "" Then
        DataTables("临时版本跟踪表").LoadFilter = filter & "需求提交时间 > \'" & startdate.Value & "\' And 需求提交时间 < \'"  & enddate.value.AddDays(1) & "\' and  博达机型 = \'" & bdjx.text & "\'"
    End If
Else
    Select Case user.Group
        Case  "录入","审核","协议一组","协议二组","交换组","R驱动组","S驱动组","EPON组","ONU组","网管组","网络组","路由组","PTN应用组","链路组","测试epon","测试switch","测试router"
            Dim filter = DataTables("临时版本跟踪表").LoadFilter
            If filter > "" Then filter &= " and "
            If kh.text = ""  And bdjx.text = "" Then
                DataTables("临时版本跟踪表").LoadFilter = filter & "需求提交时间 > \'" & startdate.Value & "\' And 需求提交时间 < \'"  & enddate.value.AddDays(1) & "\'"
            ElseIf kh.text <> "" And bdjx.text <> "" Then
                DataTables("临时版本跟踪表").LoadFilter = filter & "需求提交时间 > \'" & startdate.Value & "\' And 需求提交时间 < \'"  & enddate.value.AddDays(1) & "\' and  客户 = \'" & kh.text & "\' and 博达机型 = \'" & bdjx.text & "\'"
            ElseIf kh.text <> "" And bdjx.text = "" Then
                DataTables("临时版本跟踪表").LoadFilter = filter & "需求提交时间 > \'" & startdate.Value & "\' And 需求提交时间 < \'"  & enddate.value.AddDays(1) & "\' and  客户 = \'" & kh.text & "\'"
            ElseIf kh.text = "" And bdjx.text <> "" Then
                DataTables("临时版本跟踪表").LoadFilter = filter & "需求提交时间 > \'" & startdate.Value & "\' And 需求提交时间 < \'"  & enddate.value.AddDays(1) & "\' and  博达机型 = \'" & bdjx.text & "\'"
            End If
    End Select
End If
DataTables("临时版本跟踪表").Load

--  作者:有点蓝
--  发布时间:2016/9/18 17:57:00
--  
第一句加上msgbox(e.Table.Current isnot nothing)看看

最好上例子看看

--  作者:huhu
--  发布时间:2016/9/19 10:19:00
--  
想来想去还是换一种实现方式。
在临时版本跟踪表选择了客户,肯定是加载了数据的。那么只需要startdate和enddate的值为已加载表的"需求提交时间”列的最小和最大值。
如果加载的只有一行数据,那么startdate和enddate的值都相等,都是需求提交时间。
另外需求提交时间的格式是datalongtime。startdate和enddate应该是date。

SelectedIndexChanged代码:

Dim kh As WinForm.ComboBox = e.Form.Controls("客户")
Dim startdate As WinForm.DateTimePicker = e.Form.Controls("DateTimePicker1")
Dim enddate As WinForm.DateTimePicker = e.Form.Controls("DateTimePicker2")
DataTables("临时版本跟踪表").LoadFilter = "客户= \'" & kh.value & "\'"
DataTables("临时版本跟踪表").Load
startdate.Value = 
Enddate.value = 

--  作者:huhu
--  发布时间:2016/9/19 12:29:00
--  
有谁给解答回复一下。
"需求提交时间”列的最小和最大值,这个怎么弄出来?
--  作者:有点蓝
--  发布时间:2016/9/19 14:28:00
--  
参考:http://www.foxtable.com/webhelp/scr/0393.htm