以下是引用yangming在2009-5-8 20:45:00的发言:
我改成这样就可以了,速度还行,你试试?
Dim drk As DataRow
drk = DataTables("工资库").Find("月份 = '" & dc.Name & "' And 工号= '" & dr("工号") & "'")
if drk isnot nothing then
If dr.IsNull("工号") Then
dr(dc.Name) = Nothing
Else
dr(dc.Name) = drk("实发工资")
End If
End If
哈哈,您的更直观~![dvubb 图片点击可在新窗口打开查看](images/emot/em50.gif)
不过If dr.IsNull("工号") Then 是不是多余了,因为可以加上
f.ExcludeNullValue = True '排除空值吧,再说‘工资库’一般没有空行,对不?
少个判断,速度就更快了。
另外:你的“在生成的交叉表和DataList时如何只保留二位小数”,我有个解决办法:你在命令窗口中试试:
因为你增加了专门的表来统计!
forms("工资统计").open()
'第一: 在datalist中显示交叉统计:::::::::
Dim g1 As New CrossTableBuilder("个人分月", DataTables("工资库"))
g1.HGroups.AddDef("工号")
''g1.HGroups.AddDef("部门")
g1.HGroups.AddDef("姓名")
'g1.VGroups.AddDef("日期",DateGroupEnum.Year,"{0}年") '添加日期列用于垂直分组,按年分组
g1.VGroups.AddDef("日期","{0}月") '添加日期列用于垂直分组,按月分组
g1.Totals.AddDef("实发工资", "实发工资")
g1.OrderByTotal = True
g1.HorizontalTotal = True
g1.VerticalTotal = True
With Forms("工资统计").Controls("DataList1")
.DataTable = g1.Build(TRue)
.Build()
End With
'第二: 将datalist的内容复制到【个人分月工资表】::::::::::::::::::
Dim dst As WinForm.DataList = Forms("工资统计").Controls("DataList1")
Dim f As New Filler
f.SourceTable = dst.datatable
f.SourceCols = "工号,姓名,crsz1,crsz2,crsz3,crsz4"
f.DataTable = DataTables("个人分月工资表")
f.DataCols = "工号,姓名,一月,二月,三月,四月"
f.Filter = "[工号] <> '""' "
DataTables("个人分月工资表").DataRows.Clear() '清除原来的数据
f.Fill() '填充数据
'第三: 将【个人分月工资表】绑定到新增的窗口【工资统计1】(和原来的一样大小)中的datalist:::::::::::::
forms("工资统计1").open()
datalist中,不会出现N位的小数了
[此贴子已经被作者于2009-5-8 21:12:54编辑过]