Hier zunächst eine Structure, durch die die Parameter
der Suche genauer bestimmt werden können:
Public Structure StringCompareParams
''' <summary>Groß-/Kleinscreibung ignorieren</summary>
Public IgnoreCase As Boolean
''' <summary>Blancs am Anfang und Ende beim Vergleich ignorieren</summary>
Public IgnoreBlancs As Boolean
''' <summary>Teilstring suchen</summary>
Public Contains As Boolean
''' <summary>Teilstring nur am Anfang suchen (überschreibt Contains)</summary>
Public StartsWith As Boolean
End Structure Die entsprechende Routine für die Durchführung des Vergleichs eines
Zell-Value mit einem zu suchenden String.
''' <summary>Vergleich eines String-Value mit einem String</summary>
''' <param name="vl">Der Wert, dessen String-Darstellung verglichen werden
' soll</param>
''' <param name="str">Der zu suchende String</param>
''' <param name="scp">Festlegung der Vergleichsparameter</param>
Private Function Founded(ByVal vl As Object, ByVal str As String, _
Optional ByVal scp As StringCompareParams = Nothing) As Boolean
If vl Is Nothing Or str Is Nothing Then Return False
If IsDBNull(vl) Then Return false
Try
Dim s As String = CType(vl, String)
If scp.IgnoreBlancs Then s = s.Trim : str = str.Trim
If scp.IgnoreCase Then s = s.ToUpper : str = str.ToUpper
If str = String.Empty Then Return False
If scp.StartsWith Then
Return s.StartsWith(str)
ElseIf scp.Contains Then
Return s.Contains(str)
Else
Return s = str
End If
Catch ex As Exception
Return False
End Try
End Function Die Routine, die ab einem vorgegebenen Zell-Index die nächste Zelle
sucht. Die Suche wird zeilenweise durchgeführt!
Private Function SucheNächstenWert(ByVal grid As DataGridView, _
ByVal sSuchWert As String, _
ByRef RowIndex As Integer, _
ByRef Columnindex As Integer, _
Optional scp As StringCompareParams = Nothing) As Boolean
Columnindex = Math.Max(-1, Columnindex)
RowIndex = Math.Max(0, RowIndex)
With grid
'Suche in der restlichen Zeile
If Columnindex < .Columns.Count - 1 Then
For j As Integer = Columnindex + 1 To .Columns.Count - 1
If Founded(.Rows(RowIndex).Cells(j).Value, _
sSuchWert, scp) Then
Columnindex = j : Return True
End If
Next j
End If
'Suche in den Folgezeilen
RowIndex += 1
Try
For i As Integer = RowIndex To .Rows.Count - 1
With .Rows(i)
For j As Integer = 0 To .Cells.Count - 1
With .Cells(j)
If Founded(.Value, sSuchWert, scp) Then
Columnindex = j : RowIndex = i
Return True
End If
End With
Next j
End With
Next i
RowIndex = -1 : Columnindex = -1
Return False
Catch ex As Exception
Return False
End Try
End With
End Function Anwendungsbeispiel ("dgv" das zu durchsuchende Grid):
'Suchparameter
Dim scp As New StringCompareParams
scp.IgnoreCase = True
scp.IgnoreBlancs = True
Dim Suchwert As String = "zu suchender Wert"
'Start-Indices der Suche
Dim rowindex As Integer = -1
Dim columnindex As Integer = -1
Dim valfounded As Boolean
Do
valfounded = _
SucheNächstenWert(dgv, Suchwert, rowindex, columnindex, scp)
If valfounded Then
'Zelle gefunden ....
'Operation durchführen
dgv.Rows(rowindex).Cells(columnindex).Style.BackColor = Color.Beige
End If
Loop While valfounded 'Suche fortsetzen, bis kein weiterer Fund vorliegt
Beitrag wurde zuletzt am 21.11.13 um 18:18:18 editiert. |