B
Bill Schanks
I have this code that worked fine, until I placed it in a
backgroundworker. The first time I generate the results, it works
fine, but on the second time I get the error:
<error>
DataGridView Default Error Dialog
The following exception occurred in the DataGridView:
System.IndexOutOfRangeException: Index 0 does not have a value.
at System.Windows.Forms.CurrencyManager.get_Item(Int32 index)
at
System.Windows.Forms.DataGridView.DataGridViewDataConnection.GetError
(Int32 rowIndex)
To replace this default dialog please handle the DataError event.
</error>
Here is the code
Private Sub btnGenerate_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) _
Handles btnGenerate.Click
'Ensure required parms are filled in
If String.IsNullOrEmpty(Me.cbAsOf.Text) Or _
(String.IsNullOrEmpty(Me.txtAcct.Text) And _
String.IsNullOrEmpty(Me.cbCID.Text) And _
String.IsNullOrEmpty(Me.cbMinor.Text)) Then
MessageBox.Show("Please input an 'As Of' Date to pull for, and at
least one other option" _
, g_sApp_Name, MessageBoxButtons.OK)
Exit Sub
End If
Try
'Update UI
_frmMain.ssStatus.Text = "Getting Acctount info"
Me.ssExecTime.Text = "Executing"
Me.ssRows.Text = "0 Rows"
_dtStart = Date.Now
'Get results
_sAcct = Me.txtAcct.Text
_sCID = Me.cbCID.SelectedValue
_sMinor = Me.cbMinor.SelectedValue
If String.IsNullOrEmpty(_sAcct) Then _sAcct = Nothing
If String.IsNullOrEmpty(_sCID) Then _sCID = Nothing
If String.IsNullOrEmpty(_sMinor) Then _sMinor = Nothing
'Run fetch in background
ReportWorker = New System.ComponentModel.BackgroundWorker
ReportWorker.WorkerSupportsCancellation = True
Me.tsStop.Enabled = True
Me.btnGenerate.Enabled = False
Me.btnReset.Enabled = False
ReportWorker.RunWorkerAsync()
'Placed in background worker
'Me.Spoc_RCT_AcctLookupTableAdapter.Fill
(Me.AcctLookupDataSet.spoc_RCT_AcctLookup _
' , CDate(Me.cbAsOf.SelectedValue) _
' , _sAcct _
' , _sCID _
' , _sMinor)
Catch ex As Exception
HandledExceptionManager.ShowDialog("An error occured while
attemting to " _
& "pull the requested report.", _
"Your report could not be retrieved.", _
"Evaluate the error, and re-try the command. If you need
assistance, " _
& "Click Help/About for contact info.", _
ex, _
MessageBoxButtons.OK, _
MessageBoxIcon.Error, _
HandledExceptionManager.UserErrorDefaultButton.Default)
Finally
'Cursor = Cursors.Default
'_frmMain.ssStatus.Text = "Ready"
'Me.Spoc_RCT_AcctLookupBindingNavigator.Enabled = True
End Try
End Sub
Private Sub ReportWorker_DoWork(ByVal sender As Object, _
ByVal e As System.ComponentModel.DoWorkEventArgs) _
Handles ReportWorker.DoWork
Me.Spoc_RCT_AcctLookupTableAdapter.Fill
(Me.AcctLookupDataSet.spoc_RCT_AcctLookup _
, CDate(Me.cbAsOf.SelectedValue) _
, _sAcct _
, _sCID _
, _sMinor)
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As
Object, _
ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _
Handles ReportWorker.RunWorkerCompleted ' Completed
'If ReportWorker.CancellationPending Then Exit Sub
'Buttons/Status
Me.tsStop.Enabled = False
Me.btnGenerate.Enabled = True
Me.btnReset.Enabled = True
_frmMain.ssStatus.Text = "Ready"
'Process time
_dtEnd = Date.Now
_ts = _dtEnd - _dtStart
Me.ssExecTime.Text = String.Format("{0:d2}:{1:d2}:{2:d2}",
_ts.Hours, _ts.Minutes, _ts.Seconds)
Me.ssRows.Text = Me.dvg_results.RowCount & " Rows"
'enable copy/save options
If Me.dvg_results.RowCount > 0 Then
Me.ts_copy.Enabled = True
Me.ts_xlSave.Enabled = True
Me.tsExportToXL.Enabled = True
Else
Me.ts_copy.Enabled = False
Me.ts_xlSave.Enabled = False
Me.tsExportToXL.Enabled = False
End If
End Sub
backgroundworker. The first time I generate the results, it works
fine, but on the second time I get the error:
<error>
DataGridView Default Error Dialog
The following exception occurred in the DataGridView:
System.IndexOutOfRangeException: Index 0 does not have a value.
at System.Windows.Forms.CurrencyManager.get_Item(Int32 index)
at
System.Windows.Forms.DataGridView.DataGridViewDataConnection.GetError
(Int32 rowIndex)
To replace this default dialog please handle the DataError event.
</error>
Here is the code
Private Sub btnGenerate_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) _
Handles btnGenerate.Click
'Ensure required parms are filled in
If String.IsNullOrEmpty(Me.cbAsOf.Text) Or _
(String.IsNullOrEmpty(Me.txtAcct.Text) And _
String.IsNullOrEmpty(Me.cbCID.Text) And _
String.IsNullOrEmpty(Me.cbMinor.Text)) Then
MessageBox.Show("Please input an 'As Of' Date to pull for, and at
least one other option" _
, g_sApp_Name, MessageBoxButtons.OK)
Exit Sub
End If
Try
'Update UI
_frmMain.ssStatus.Text = "Getting Acctount info"
Me.ssExecTime.Text = "Executing"
Me.ssRows.Text = "0 Rows"
_dtStart = Date.Now
'Get results
_sAcct = Me.txtAcct.Text
_sCID = Me.cbCID.SelectedValue
_sMinor = Me.cbMinor.SelectedValue
If String.IsNullOrEmpty(_sAcct) Then _sAcct = Nothing
If String.IsNullOrEmpty(_sCID) Then _sCID = Nothing
If String.IsNullOrEmpty(_sMinor) Then _sMinor = Nothing
'Run fetch in background
ReportWorker = New System.ComponentModel.BackgroundWorker
ReportWorker.WorkerSupportsCancellation = True
Me.tsStop.Enabled = True
Me.btnGenerate.Enabled = False
Me.btnReset.Enabled = False
ReportWorker.RunWorkerAsync()
'Placed in background worker
'Me.Spoc_RCT_AcctLookupTableAdapter.Fill
(Me.AcctLookupDataSet.spoc_RCT_AcctLookup _
' , CDate(Me.cbAsOf.SelectedValue) _
' , _sAcct _
' , _sCID _
' , _sMinor)
Catch ex As Exception
HandledExceptionManager.ShowDialog("An error occured while
attemting to " _
& "pull the requested report.", _
"Your report could not be retrieved.", _
"Evaluate the error, and re-try the command. If you need
assistance, " _
& "Click Help/About for contact info.", _
ex, _
MessageBoxButtons.OK, _
MessageBoxIcon.Error, _
HandledExceptionManager.UserErrorDefaultButton.Default)
Finally
'Cursor = Cursors.Default
'_frmMain.ssStatus.Text = "Ready"
'Me.Spoc_RCT_AcctLookupBindingNavigator.Enabled = True
End Try
End Sub
Private Sub ReportWorker_DoWork(ByVal sender As Object, _
ByVal e As System.ComponentModel.DoWorkEventArgs) _
Handles ReportWorker.DoWork
Me.Spoc_RCT_AcctLookupTableAdapter.Fill
(Me.AcctLookupDataSet.spoc_RCT_AcctLookup _
, CDate(Me.cbAsOf.SelectedValue) _
, _sAcct _
, _sCID _
, _sMinor)
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As
Object, _
ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _
Handles ReportWorker.RunWorkerCompleted ' Completed
'If ReportWorker.CancellationPending Then Exit Sub
'Buttons/Status
Me.tsStop.Enabled = False
Me.btnGenerate.Enabled = True
Me.btnReset.Enabled = True
_frmMain.ssStatus.Text = "Ready"
'Process time
_dtEnd = Date.Now
_ts = _dtEnd - _dtStart
Me.ssExecTime.Text = String.Format("{0:d2}:{1:d2}:{2:d2}",
_ts.Hours, _ts.Minutes, _ts.Seconds)
Me.ssRows.Text = Me.dvg_results.RowCount & " Rows"
'enable copy/save options
If Me.dvg_results.RowCount > 0 Then
Me.ts_copy.Enabled = True
Me.ts_xlSave.Enabled = True
Me.tsExportToXL.Enabled = True
Else
Me.ts_copy.Enabled = False
Me.ts_xlSave.Enabled = False
Me.tsExportToXL.Enabled = False
End If
End Sub