Hallo, ich möchte über einen Backgroundworker eine Berechnung starten, und je nach Ergebnis den ErrorText in der HeaderCell und / oder die Hintergrundfarbe dieser Headercell setzen.
Mein Code bringt keinen Fehler, aber auch keine sichtbare Veränderung.
Dim hatAdressFehler As Boolean = False
Private Sub StarteAdressWorker(ByVal LvItem As LvItemRow)
' Beende den aktuellen Hintergrundworker, wenn einer läuft
If AdressWorker IsNot Nothing AndAlso AdressWorker.IsBusy Then
AdressWorker.CancelAsync()
End If
hatAdressFehler = False
' Starte einen neuen Hintergrundworker
AdressWorker = New System.ComponentModel.BackgroundWorker()
AddHandler AdressWorker.DoWork, AddressOf AdressWorker_DoWork
AddHandler AdressWorker.RunWorkerCompleted, AddressOf _
AdressWorker_RunWorkerCompleted
AdressWorker.WorkerSupportsCancellation = True
AdressWorker.RunWorkerAsync(LvItem)
End Sub
Private Sub AdressWorker_DoWork(ByVal sender As Object, ByVal e As _
System.ComponentModel.DoWorkEventArgs)
Dim LvItem = DirectCast(e.Argument, LvItemRow)
' Berechnungen durchführen
' Überprüfen ob ein Abbruch angefordert wurde
Dim mRows = LvItem.GetMassenRows
For i As Integer = 0 To mRows.Count - 1
If prüfeAdresse(mRows(i)) = False Then
hatAdressFehler = True
Exit For
End If
' Überprüfe, ob ein Abbruch angefordert wurde
If AdressWorker.CancellationPending Then
e.Cancel = True
Exit For
End If
Next
End Sub
Private Sub AdressWorker_RunWorkerCompleted(ByVal sender As Object, ByVal e _
As System.ComponentModel.RunWorkerCompletedEventArgs)
If e.Cancelled Then
' Berechnung wurde abgebrochen
hatAdressFehler = False
Else
' Berechnung wurde erfolgreich abgeschlossen
MassenDataGridView.Columns( _
PmDataSet.Massen.AdresseColumn.ColumnName).HeaderCell.ErrorText = _
If(hatAdressFehler, "AdressFehler", Nothing) ' Fehlertext setzen
MassenDataGridView.Columns( _
PmDataSet.Massen.AdresseColumn.ColumnName).HeaderCell.Style.BackCol_
or = If(hatAdressFehler, Color.DarkOrange, Color.LightGreen)
MassenDataGridView.Invoke(New MethodInvoker(AddressOf _
ChangeHeaderCellBackColor))
SetObjBackColor(AdressFehlerLabel, Color.DarkOrange)
SetObjVisible(AdressFehlerLabel, True)
End If
End Sub
Private Sub ChangeHeaderCellBackColor()
MassenDataGridView.Columns("Adresse").HeaderCell.Style.BackColor = If( _
hatAdressFehler, Color.DarkOrange, Color.LightGreen) ' Zum Beispiel
MassenDataGridView.Invalidate() ' DataGridView neu zeichnen
End Sub
Private Function prüfeAdresse(ByVal mRow As MassenRow) As Boolean
Dim Funde = PmDataSet.LV.Current.GetMassenRows.Where(Function(a) Not _
a.RowState = DataRowState.Deleted AndAlso Not a.RowState = _
DataRowState.Detached AndAlso a.Adresse = mRow.Adresse) '.OrderBy(
' Function(a) a.LvItemID)
If Funde.Count > 1 Then
Return False
End If
Return True
End Function Bei Haltepunkten hält der Code an, die Variable wird richtig befüllt.
Aber die Veränderungen im DGV kommen nicht an.
Wo ist mein Fehler?
Danke für die Hilfe
Gruß Christian |