以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  未找到类型“Table”的公共成员“DataSource”。  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=142067)

--  作者:蓝蚂蚁
--  发布时间:2019/10/17 15:53:00
--  未找到类型“Table”的公共成员“DataSource”。

窗口中有一按钮,其代码如下:

Dim s1 As String=e.Form.controls("TextBox7").text
If s1<>"" Then
    If  Tables.Contains("前计划未送临时表")=True Then
        DataTables("前计划未送临时表").DataRows.Clear
        e.Form.controls("Table3").Table.DataSource = DataTables("前计划未送临时表")
    Else
        Dim dt As New DataTableBuilder("前计划未送临时表")
        dt.AddDef("计划日期", Gettype(Date))
        dt.AddDef("中标号或编号", Gettype(String),12)
        dt.AddDef("通用名称", Gettype(String), 50)
        dt.AddDef("规格型号", Gettype(String), 50)
        dt.AddDef("生产企业", Gettype(String), 50)
        dt.AddDef("单位", Gettype(String), 6)
        dt.addDef("相差辅助列", Gettype(Integer))
        dt.addDef("配送公司", Gettype(String), 30)
        dt.build()
        e.Form.controls("Table3").DataSource =dt.build()
    End If
    Dim Filter As String
    Filter ="isnull([数量],0)<>isnull([来货数量],0)"
    If e.form.controls("Table2").Table.DataTable.DataCols.Contains("相差辅助列")=False  Then
        e.form.controls("Table2").Table.DataTable.DataCols.Add("相差辅助列", Gettype(Integer))
    End If
    Dim krk As String =e.Form.Controls("TextBox7").Text \'入库日期
    Dim zrk As String =e.Form.Controls("TextBox8").Text
    Dim d1 As Date
    Dim d2 As Date
    If krk<>""  Then
        If   krk.Length=8 Then
            d1 = new Date(krk.SubString(0,4), krk.SubString(4,2), krk.SubString(6,2))  \'具体到某天开始
        ElseIf krk.Length=6
            d1 = new Date(krk.SubString(0,4), krk.SubString(4,2), 1)   \'月份的第一天开始
        ElseIf krk.Length=4
            d1 = new Date(krk.SubString(0,4),1, 1)   \'月份的第一天开始
        End If
    End If
    If krk="" Then
        zrk =""
    Else
        If zrk<>"" Then
            If   zrk.Length=8 Then
                d2 = new Date(zrk.SubString(0,4), zrk.SubString(4,2),zrk.SubString(6,2)) \'具体到某天开始
                d2=d2.adddays(1)
            ElseIf zrk.Length=6
                d2 = new Date(zrk.SubString(0,4), zrk.SubString(4,2), 1) \'月份的第一天开始
                d2=d2.addmonths(1)
            ElseIf zrk.Length=4
                d2 = new Date(zrk.SubString(0,4),1, 1) \'月份的第一天开始
                d2=d2.addyears(1)
            End If
        Else
            If   krk.Length=8 Then
                d2=d1.adddays(1)
            ElseIf krk.Length=6
                d2=d1.addmonths(1)
            ElseIf krk.Length=4
                d2=d1.addyears(1)
            End If
        End If
    End If
    If krk<>"" Then
        If Filter > "" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "(计划日期>=#" & d1 & "# and 计划日期<#" & d2 & "#)"
    End If
    With e.Form.Controls("DropBox1")
        If .Value IsNot Nothing Then
            If Filter > "" Then
                Filter = Filter & " And "
            End If
            Filter = Filter & "配送公司 Like \'%" & .Value & "%\'"
        End If
    End With
   
    Dim t As Table=e.Form.controls("Table2").Table
    t.filter=filter
    Dim dcs As List(Of DataRow) =DataTables("采购计划总表").Select(t.filter)
    For Each dc As DataRow In dcs
        If dc("相差")=Nothing Then
            dc("相差辅助列")=-dc("数量")
        ElseIf dc("相差")<0
            dc("相差辅助列")=dc("相差")
        End If
    Next
    e.form.controls("Table2").Table.Cols("相差辅助列").visible=True
    e.form.controls("Table2").Table.Cols("相差辅助列").Move(13)
    t.Filter =(iif(t.filter>"", t.filter, "1=1") & " And  相差辅助列 Is not null")
    Dim drs As List(Of DataRow) =e.Form.controls("Table2").Table.DataTable.Select(t.filter)
    For Each dr As DataRow In drs
        Dim r As DataRow= DataTables("前计划未送临时表").AddNew()
        \'r("登记日期")=Today()
        r("计划日期")=dr("计划日期")
        r("中标号或编号")=dr("中标号或编号")
        r("通用名称")=dr("通用名称")
        r("规格型号")=dr("规格型号")
        r("生产企业")=dr("生产企业")
        r("单位")=dr("单位")
        r("相差辅助列")=dr("相差辅助列")
        r("配送公司")=dr("配送公司")
    Next
   
    e.Form.controls("Table3").Table.AutoSizeCols()
    Forms("某计划未发登记主窗口").Controls("TabControl1").SelectedIndex = 2
Else
    MessageBox.Show("开始日期未填写,故未能生成数据!","提示")
End If

打开项目后,第一次点击这个按钮提示:

.NET Framework 版本:4.0.30319.1
Foxtable 版本:2019.6.18.1
错误所在事件:窗口,某计划未发登记主窗口,Button6,Click
详细错误信息:
未找到类型“Table”的公共成员“DataSource”。

X掉提示错误窗口后,再次点击这个按钮则能正常生成数据,何解?


--  作者:有点蓝
--  发布时间:2019/10/17 15:55:00
--  
 Else
        Dim dt As New DataTableBuilder("前计划未送临时表")
        dt.AddDef("计划日期", Gettype(Date))
        dt.AddDef("中标号或编号", Gettype(String),12)
        dt.AddDef("通用名称", Gettype(String), 50)
        dt.AddDef("规格型号", Gettype(String), 50)
        dt.AddDef("生产企业", Gettype(String), 50)
        dt.AddDef("单位", Gettype(String), 6)
        dt.addDef("相差辅助列", Gettype(Integer))
        dt.addDef("配送公司", Gettype(String), 30)
        ‘’dt.build() ‘去掉’
        e.Form.controls("Table3").DataSource =dt.buildDataSource()
    End If