'System.ArgumentOutOfRangeException'“尝试了其他解决方案,但从未解决过。”

时间:2020-08-21 02:03:47

标签: vb.net

我尝试了其他解决方案(例如更改应在数据上显示的项目),但我认为我从来没有解决这个问题。预先感谢任何可以回答我问题的人...

Screenshot of the problem

Screenshot of the problem


Private Sub dgEmp_Click(sender As Object, e As EventArgs) Handles dgEmp.Click
    LoadEmployeeInfo(dgEmp.SelectedRows.Item(0).Index)

End Sub

Private Sub LoadEmployee(Optional q As String = "")
    list.Query = "Select id,lastname,firstname,middlename,sss,philh,pag,rate,cola,mStatus,free_insurance,mp,mpvalue from tblemployee where (lastname like'%" & q & "%'  or firstname like'%" & q & "%' or middlename  like'%" & q & "%') and deactive='No' order by lastname,firstname,middlename"

    list.datagrid = dgEmp
    list.LoadRecords()
    If list.RecordCount = Nothing Then Exit Sub

    LoadEmployeeInfo(dgEmp.SelectedRows.Item(0).Index)
End Sub
Public Sub LoadEmployeeInfo(index As Integer)
    With dgEmp.Rows(index)
        id = .Cells(0).Value
        lblName.Text = .Cells(1).Value & ", " & .Cells(2).Value & " " & .Cells(3).Value
        rpd = .Cells(7).Value
        lblRate.Text = Format(rpd, "#,##0.000000000")
        cola = .Cells(8).Value
        lblAllo.Text = Format(cola, "#,##0.000000000")
        otrate = (rpd / 8) * 1.25
        lblOTRate.Text = Format(otrate, "#,##0.000000000")
        IsSSS = ConvertToBoolean(.Cells(4).Value)
        IsPH = ConvertToBoolean(.Cells(5).Value) 'add
        IsPAG = ConvertToBoolean(.Cells(6).Value) 'pos
        IsMP = ConvertToBoolean(.Cells(11).Value)
        IsFI = ConvertToBoolean(.Cells(10).Value)
        CStatus = .Cells(9).Value
        MPV = .Cells(12).Value
    End With

    ThisPayroll.Query = "Select * from tblpayroll where payrollperiod=? and empid=?"
    ThisPayroll.AddParam("@payrollperiod", GetPeriod)
    ThisPayroll.AddParam("@empid", id)
    ThisPayroll.ExecQuery()

    If ThisPayroll.RecordCount = Nothing Then
        isUpdate = False
        txtReg_Days.Text = 0
        txtReg_OT.Text = 0
        txtSP_Days.Text = 0
        txtSP_OT.Text = 0
        txtHoliday.Text = 0
        txtHolidayOT.Text = 0
        txtLate.Text = 0
        txtAdjustment.Text = 0
        txtSSSL.Text = 0
        txtHDMFL.Text = 0
        txtCA.Text = 0
        txtDMA.Text = 0
        txtRice.Text = 0
        txtCloth.Text = 0
        txtEmpMed.Text = 0
        txtLaundry.Text = 0
        txtMeal.Text = 0
    Else
        With ThisPayroll.DataSource
            isUpdate = True
            txtReg_Days.Text = .Rows(0)("regday")
            txtReg_OT.Text = .Rows(0)("ot")
            txtSP_Days.Text = .Rows(0)("spday")
            txtSP_OT.Text = .Rows(0)("spdayot")
            txtHoliday.Text = .Rows(0)("lholiday")
            txtHolidayOT.Text = .Rows(0)("lhot")
            txtLate.Text = .Rows(0)("hlate")
            txtAdjustment.Text = .Rows(0)("salary_adj")
            txtSSSL.Text = .Rows(0)("sss_loan")
            txtHDMFL.Text = .Rows(0)("pag_loan")
            txtCA.Text = .Rows(0)("cash_advance")
            txtDMA.Text = .Rows(0)("depmed")
            txtRice.Text = .Rows(0)("ricesub")
            txtCloth.Text = .Rows(0)("clothing")
            txtEmpMed.Text = .Rows(0)("empmed")
            txtLaundry.Text = .Rows(0)("laundry")
            txtMeal.Text = .Rows(0)("meal")

        End With
    End If
    Compute()
End Sub

1 个答案:

答案 0 :(得分:0)

如果不能确保在其他地方选择了某些内容,则可以在最后一刻检查它,如下所示:

Private Sub DataGridView1_SelectionChanged(sender As Object, e As EventArgs) Handles DataGridView1.SelectionChanged
    If dgEmp.SelectedRows.Count > 0 Then
        LoadEmployeeInfo(dgEmp.SelectedRows.Item(0).Index)
    End If
End Sub

仅在您使用索引零的情况下才起作用,否则您也必须注意索引。当然,这是假设dgEmp没什么...

此外,请注意,我将其附加到SelectionChanged事件中,因为我认为Click事件不会给您想要的东西,但是我会把这一部分留给您处理。玩得开心!