以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 关于绑定表 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=91787) |
-- 作者:lk15502 -- 发布时间: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 -- 发布时间:2016/10/19 8:35:00 -- 代码中dr2("数量“)改成dr2("重量") |
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间:2016/10/19 10:09:00 -- 试运行出现错误: .NET Framework 版本:2.0.50727.5485 Foxtable 版本:2016.7.29.1 错误所在事件:窗口,织造产量表,ComboBox1,SelectedIndexChanged 详细错误信息: 索引超出了数组界限。 |
-- 作者:有点蓝 -- 发布时间:2016/10/19 10:45:00 -- 调试技巧:http://www.foxtable.com/webhelp/scr/1485.htm 看看是哪句代码有问题,也可能是数据的问题
|