Foxtable(狐表)用户栏目专家坐堂 → 关于绑定表


  共有1937人关注过本帖树形打印复制链接

主题:关于绑定表

帅哥哟,离线,有人找我吗?
lk15502
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:705 积分:4897 威望:0 精华:0 注册:2016/5/17 12:03:00
关于绑定表  发帖心情 Post By:2016/10/19 8:20:00 [只看该作者]

织造产量表有一列“织造人员”是多值字段,填入姓名和织造重量,如张山-256.8,李四-257.9,王五-123.6,诸葛亮-159.8;在combobox的selectedindexchanged事件写入代码,模仿帮助中多值字段统计产量,并绑定表,请老师看看代码可以改动的地方,
Dim month As Integer = e.sender.text
Dim Year As Integer = Date.Today.Year
Dim day As Integer = Date.Today.day

If month = 1 Then
    Dim dt1 As Date = New Date(Year,1,1) '本一年的1月1日
    Dim dt2 As Date = New Date(Year,1,25) '本年的1月的25日
    
    Dim dt As DataTable
    Dim dtb As New DataTableBuilder("织造产量统计")
    dtb.AddDef("姓名", Gettype(String), 16)
    dtb.AddDef("重量", Gettype(Double))
    dt = dtb.Build()
    '开始逐行累加统计
    Dim lst As New Dictionary(of String ,DataRow) '定义一个字典,用于检索每个员工在统计表中对应的行
    For Each dr1 As DataRow In DataTables("织造产量表").Select("[织造日期] >= '" & dt1 & "' and [织造日期] <= '" & dt2 & "'")
        If dr1.IsNull("织造人员") = False AndAlso dr1.Isnull("织造重量") = False Then '如果织造人员列不为空
            Dim nms() As String = dr1("织造人员").Split(",") '将工号列内容拆分成数组
            'Dim v As Double = dr1("数量") / nms.Length '获得平均之后每个工号的生产数量
            For Each nm As String In nms '遍历参与加工此产品的每个姓名-重量
                Dim nm1() As String = nm.split("-")
                Dim v As Double = val(nm1(1))
                Dim dr2 As DataRow
                If lst.ContainsKey(nm1(0)) '如果集合中包括此姓名对应的行
                    dr2= lst(nm1(0)) '将此行赋值给变量dr2
                Else
                    dr2 = dt.AddNew() '否则增加一行.
                    dr2("姓名") = nm1(0) '新增行的姓名列设置为此姓名
                    lst.add(nm1(0),dr2) '将新增行添加到字典中,以便接下来检索
                End If
                dr2("数量") = dr2("数量") + v '加上姓名"-"后的重量
            Next
        End If
    Next
    Tables("织造产量表_Table2").DataSource = dt
    
ElseIf month = 12 Then
    Dim dt1 As Date = New Date(Year,11,26) '上个月26日
    Dim dt2 As Date = New Date(Year,12,31) '本月的31日
    
    Dim dt As DataTable
    Dim dtb As New DataTableBuilder("织造产量统计")
    dtb.AddDef("姓名", Gettype(String), 16)
    dtb.AddDef("重量", Gettype(Double))
    dt = dtb.Build()
    '开始逐行累加统计
    Dim lst As New Dictionary(of String ,DataRow) '定义一个字典,用于检索每个员工在统计表中对应的行
    For Each dr1 As DataRow In DataTables("织造产量表").Select("[织造日期] >= '" & dt1 & "' and [织造日期] <= '" & dt2 & "'")
        If dr1.IsNull("织造人员") = False AndAlso dr1.Isnull("织造重量") = False Then '如果织造人员列不为空
            Dim nms() As String = dr1("织造人员").Split(",") '将工号列内容拆分成数组
            'Dim v As Double = dr1("数量") / nms.Length '获得平均之后每个工号的生产数量
            For Each nm As String In nms '遍历参与加工此产品的每个姓名-重量
                Dim nm1() As String = nm.split("-")
                Dim v As Double = val(nm1(1))
                Dim dr2 As DataRow
                If lst.ContainsKey(nm1(0)) '如果集合中包括此姓名对应的行
                    dr2= lst(nm1(0)) '将此行赋值给变量dr2
                Else
                    dr2 = dt.AddNew() '否则增加一行.
                    dr2("姓名") = nm1(0) '新增行的姓名列设置为此姓名
                    lst.add(nm1(0),dr2) '将新增行添加到字典中,以便接下来检索
                End If
                dr2("数量") = dr2("数量") + v '加上姓名"-"后的重量
            Next
        End If
    Next
    Tables("织造产量表_Table2").DataSource = dt
    
ElseIf month = 365 Then
    Dim dt1 As Date = New Date(Year,1,1) '1月1日
    Dim dt2 As Date = New Date(Year,12,31) '12月的31日
    
    Dim dt As DataTable
    Dim dtb As New DataTableBuilder("织造产量统计")
    dtb.AddDef("姓名", Gettype(String), 16)
    dtb.AddDef("重量", Gettype(Double))
    dt = dtb.Build()
    '开始逐行累加统计
    Dim lst As New Dictionary(of String ,DataRow) '定义一个字典,用于检索每个员工在统计表中对应的行
    For Each dr1 As DataRow In DataTables("织造产量表").Select("[织造日期] >= '" & dt1 & "' and [织造日期] <= '" & dt2 & "'")
        If dr1.IsNull("织造人员") = False AndAlso dr1.Isnull("织造重量") = False Then '如果织造人员列不为空
            Dim nms() As String = dr1("织造人员").Split(",") '将工号列内容拆分成数组
            'Dim v As Double = dr1("数量") / nms.Length '获得平均之后每个工号的生产数量
            For Each nm As String In nms '遍历参与加工此产品的每个姓名-重量
                Dim nm1() As String = nm.split("-")
                Dim v As Double = val(nm1(1))
                Dim dr2 As DataRow
                If lst.ContainsKey(nm1(0)) '如果集合中包括此姓名对应的行
                    dr2= lst(nm1(0)) '将此行赋值给变量dr2
                Else
                    dr2 = dt.AddNew() '否则增加一行.
                    dr2("姓名") = nm1(0) '新增行的姓名列设置为此姓名
                    lst.add(nm1(0),dr2) '将新增行添加到字典中,以便接下来检索
                End If
                dr2("数量") = dr2("数量") + v '加上姓名"-"后的重量
            Next
        End If
    Next
    
Else
    Dim dt1 As Date = New Date(Year,(Month - 1),26) '上个月26日&
    Dim dt2 As Date = New Date(Year,Month,25) '本月的25日
    
    Dim dt As DataTable
    Dim dtb As New DataTableBuilder("织造产量统计")
    dtb.AddDef("姓名", Gettype(String), 16)
    dtb.AddDef("重量", Gettype(Double))
    dt = dtb.Build()
    '开始逐行累加统计
    Dim lst As New Dictionary(of String ,DataRow) '定义一个字典,用于检索每个员工在统计表中对应的行
    For Each dr1 As DataRow In DataTables("织造产量表").Select("[织造日期] >= '" & dt1 & "' and [织造日期] <= '" & dt2 & "'")
        If dr1.IsNull("织造人员") = False AndAlso dr1.Isnull("织造重量") = False Then '如果织造人员列不为空
            Dim nms() As String = dr1("织造人员").Split(",") '将工号列内容拆分成数组
            'Dim v As Double = dr1("数量") / nms.Length '获得平均之后每个工号的生产数量
            For Each nm As String In nms '遍历参与加工此产品的每个姓名-重量
                Dim nm1() As String = nm.split("-")
                Dim v As Double = val(nm1(1))
                Dim dr2 As DataRow
                If lst.ContainsKey(nm1(0)) '如果集合中包括此姓名对应的行
                    dr2= lst(nm1(0)) '将此行赋值给变量dr2
                Else
                    dr2 = dt.AddNew() '否则增加一行.
                    dr2("姓名") = nm1(0) '新增行的姓名列设置为此姓名
                    lst.add(nm1(0),dr2) '将新增行添加到字典中,以便接下来检索
                End If
                dr2("数量") = dr2("数量") + v '加上姓名"-"后的重量
            Next
        End If
    Next
    Tables("织造产量表_Table2").DataSource = dt
End If

 回到顶部
帅哥哟,离线,有人找我吗?
lk15502
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:705 积分:4897 威望:0 精华:0 注册:2016/5/17 12:03:00
  发帖心情 Post By:2016/10/19 8:35:00 [只看该作者]

代码中dr2("数量“)改成dr2("重量")

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107680 积分:547721 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/19 9:52:00 [只看该作者]

Dim month As Integer = e.sender.text
Dim Year As Integer = Date.Today.Year
Dim day As Integer = Date.Today.day
Dim dt1 As Date
Dim dt2 As Date
If month = 1 Then
    dt1= New Date(Year,1,1) '本一年的1月1日
    dt2 = New Date(Year,1,25) '本年的1月的25日
ElseIf month = 12 Then
    dt1= New Date(Year,11,26) '上个月26日
    dt2 = New Date(Year,12,31) '本月的31日

ElseIf month = 365 Then
    dt1= New Date(Year,1,1) '1月1日
    dt2 = New Date(Year,12,31) '12月的31日
Else
    dt1= New Date(Year,(Month - 1),26) '上个月26日&
    dt2 = New Date(Year,Month,25) '本月的25日
End If

Dim dt As DataTable
Dim dtb As New DataTableBuilder("织造产量统计")
dtb.AddDef("姓名", Gettype(String), 16)
dtb.AddDef("重量", Gettype(Double))
dt = dtb.Build()
'开始逐行累加统计
Dim lst As New Dictionary(of String ,DataRow) '定义一个字典,用于检索每个员工在统计表中对应的行
For Each dr1 As DataRow In DataTables("织造产量表").Select("[织造日期] >= '" & dt1 & "' and [织造日期] <= '" & dt2 & "'")
    If dr1.IsNull("织造人员") = False AndAlso dr1.Isnull("织造重量") = False Then '如果织造人员列不为空
        Dim nms() As String = dr1("织造人员").Split(",") '将工号列内容拆分成数组
        'Dim v As Double = dr1("数量") / nms.Length '获得平均之后每个工号的生产数量
        For Each nm As String In nms '遍历参与加工此产品的每个姓名-重量
            Dim nm1() As String = nm.split("-")
            Dim v As Double = val(nm1(1))
            Dim dr2 As DataRow
            If lst.ContainsKey(nm1(0)) '如果集合中包括此姓名对应的行
                dr2= lst(nm1(0)) '将此行赋值给变量dr2
            Else
                dr2 = dt.AddNew() '否则增加一行.
                dr2("姓名") = nm1(0) '新增行的姓名列设置为此姓名
                lst.add(nm1(0),dr2) '将新增行添加到字典中,以便接下来检索
            End If
            dr2("数量") = dr2("数量") + v '加上姓名"-"后的重量
        Next
    End If
Next
Tables("织造产量表_Table2").DataSource = dt



 回到顶部
帅哥哟,离线,有人找我吗?
lk15502
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:705 积分:4897 威望:0 精华:0 注册:2016/5/17 12:03:00
  发帖心情 Post By:2016/10/19 10:09:00 [只看该作者]

试运行出现错误:
.NET Framework 版本:2.0.50727.5485
Foxtable 版本:2016.7.29.1
错误所在事件:窗口,织造产量表,ComboBox1,SelectedIndexChanged
详细错误信息:
索引超出了数组界限。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107680 积分:547721 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/19 10:45:00 [只看该作者]

调试技巧:http://www.foxtable.com/webhelp/scr/1485.htm

看看是哪句代码有问题,也可能是数据的问题

 回到顶部