Foxtable(狐表)用户栏目专家坐堂 → 按条件统计列数


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

主题:按条件统计列数

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


加好友 发短信
等级:超级版主 帖子:106092 积分:539565 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/6/24 9:11:00 [显示全部帖子]

另外考勤表datacolchanged可以改进一下,没有必要一个日期一段代码

If e.DataCol.Name = "考勤日期_1_考勤" Then
    If e.DataRow.IsNull("考勤日期_1_考勤") = True Then
        e.DataRow("考勤日期_1_小时") = Nothing
    End If
End If

If e.DataCol.Name = "考勤日期_2_考勤" Then
    If e.DataRow.IsNull("考勤日期_2_考勤") = True Then
        e.DataRow("考勤日期_2_小时") = Nothing
    End If
End If
……

全部31天判断可以改为一个代码即可:
If e.DataCol.Name.StartsWith("考勤日期_") AndAlso e.DataCol.Name.EndsWith("_考勤")  Then
    If e.DataRow.IsNull(e.DataCol.Name) = True Then
        e.DataRow(e.DataCol.Name.Replace("_考勤","_小时")) = Nothing
    End If
End If

------------------
同样
Dim de13 As DataRow = e.DataRow
Select Case e.DataCol.Name
    Case "考勤月份"
        If e.DataRow.IsNull("考勤月份") = False
            For Each dc As DataCol In e.DataTable.DataCols
                If dc.Name.EndsWith("考勤日期_13_日期") Then '代码都指定了具体的列名,再遍历所有列完全就是多余
                    Dim day As Integer = cint(dc.Name.Split("_")(1))
                    Dim d As Date = cdate(e.DataRow("考勤月份") & "-01")
                    If day >= 21 Then
                        Dim d2 As Date = d.AddMonths(-1).AddDays(day - 1)
                        If d2.Month = d.AddMonths(-1).Month Then
                            de13(dc.Name) = d2
                        Else
                            de13(dc.Name) = Nothing
                        End If
                    Else
                        de13(dc.Name) = d.AddDays(day - 1)
                    End If
                End If
            Next
        End If
End Select
全部31天判断可以改为一个代码即可:

Select Case e.DataCol.Name
    Case "考勤月份"
        If e.DataRow.IsNull("考勤月份") = False
            For Each dc As DataCol In e.DataTable.DataCols
                If dc.Name.StartsWith("考勤日期_") AndAlso dc.Name.EndsWith("_日期") Then
                    Dim day As Integer = cint(dc.Name.Split("_")(1))
                    Dim d As Date = cdate(e.DataRow("考勤月份") & "-01")
                    If day >= 21 Then
                        Dim d2 As Date = d.AddMonths(-1).AddDays(day - 1)
                        If d2.Month = d.AddMonths(-1).Month Then
                            e.DataRow(dc.Name) = d2
                        Else
                            e.DataRow(dc.Name) = Nothing
                        End If
                    Else
                        e.DataRow(dc.Name) = d.AddDays(day - 1)
                    End If
                End If
            Next
        End If
End Select

学代码尽量先理解代码的逻辑,而不是为了抄而抄,这样永远都不会进步

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


加好友 发短信
等级:超级版主 帖子:106092 积分:539565 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/6/27 8:47:00 [显示全部帖子]

If e.DataCol.Name = "编号"
    If e.DataRow.IsNull("编号") = True  Then
        DataTables("双休加班").DeleteFor("编号='" & e.DataRow("编号") & "'")
    Else
        For Each dc As DataCol In e.DataTable.DataCols
            If dc.Name.StartsWith("考勤日期_") AndAlso dc.Name.EndsWith("_小时") = False Then
                Dim day As Integer = cint(dc.Name.Split("_")(1))
                Dim ndr1 As DataRow = DataTables("双休加班").Find("编号='" & e.DataRow("编号") & "'")
                If ndr1 Is Nothing Then
                    Dim ndr As Row = Tables("双休加班").AddNew
                    ndr("编号") = e.DataRow("编号")
                    ndr("考勤年份") = e.DataRow("考勤年份")
                    ndr("考勤月份") = e.DataRow("考勤月份")
                    ndr("班组") = e.DataRow("班组")
                    ndr("用工性质") = e.DataRow("用工性质")
                    ndr("姓名") = e.DataRow("姓名")
                    If e.DataRow("考勤日期_" & day & "_考勤").Contains("⊕") = False OrElse e.DataRow("考勤日期_" & day & "_休息日") <> "周末" Then
                        ndr("考勤日期_" & day & "_小时") = Nothing
                    Else
                        If e.DataRow("考勤日期_" & day & "_考勤").Contains("⊕") = True AndAlso e.DataRow("考勤日期_" & day & "_休息日") = "周末" AndAlso e.DataRow.IsNull("考勤日期_" & day & "_小时") = True Then
                            ndr("考勤日期_" & day & "_小时") = "8"
                        End If
                        If e.DataRow("考勤日期_" & day & "_考勤").Contains("⊕") = True AndAlso e.DataRow("考勤日期_" & day & "_休息日") = "周末" AndAlso e.DataRow.IsNull("考勤日期_" & day & "_小时") = False Then
                            ndr("考勤日期_" & day & "_小时") = e.DataRow("考勤日期_" & day & "_小时")
                        End If
                    End If
                    ndr.Move(0)
                End If
            End If
        Next
    End If
ElseIf e.DataRow.Name.StartsWith("考勤日期_") AndAlso e.DataRow.Name.EndsWith("_小时") = False Then
    Dim day As Integer = cint(e.DataRow.Name.Split("_")(1))
    Dim ndr1 As DataRow = DataTables("双休加班").Find("编号='" & e.DataRow("编号") & "'")
    If ndr1 Is Nothing Then
        Dim ndr As Row = Tables("双休加班").AddNew
        ndr("编号") = e.DataRow("编号")
        ndr("考勤年份") = e.DataRow("考勤年份")
        ndr("考勤月份") = e.DataRow("考勤月份")
        ndr("班组") = e.DataRow("班组")
        ndr("用工性质") = e.DataRow("用工性质")
        ndr("姓名") = e.DataRow("姓名")
        If e.DataRow("考勤日期_" & day & "_考勤").Contains("⊕") = False OrElse e.DataRow("考勤日期_" & day & "_休息日") <> "周末" Then
            ndr("考勤日期_" & day & "_小时") = Nothing
        Else
            If e.DataRow("考勤日期_" & day & "_考勤").Contains("⊕") = True AndAlso e.DataRow("考勤日期_" & day & "_休息日") = "周末" AndAlso e.DataRow.IsNull("考勤日期_" & day & "_小时") = True Then
                ndr("考勤日期_" & day & "_小时") = "8"
            End If
            If e.DataRow("考勤日期_" & day & "_考勤").Contains("⊕") = True AndAlso e.DataRow("考勤日期_" & day & "_休息日") = "周末" AndAlso e.DataRow.IsNull("考勤日期_" & day & "_小时") = False Then
                ndr("考勤日期_" & day & "_小时") = e.DataRow("考勤日期_" & day & "_小时")
            End If
        End If
        ndr.Move(0)
    End If
End If


 回到顶部
总数 13 上一页 1 2