Forums Neueste Beiträge
 

DataView.RowFilter Problem

05/05/2009 - 11:07 von Jens Büchert | Report spam
Hallo NG,

ich möchte gerne meine Artikeldaten mit einer DataView filtern.
Jetzt hab ich das Problem, dass meine Artikelnummern Sonderzeichen
enthalten.

bsp.:

4/28001/5.5*pt32b
4/28002/8*68b0.34
usw.

Bei der Eingabe der Artikelnummer wird nun eine Exception ausgelöst.:

Fehler im Like-Operator: Das Zeichenfolgenmuster '4/27103/5.5*3%' ist
ungültig.

Scheint am Zeichen "*" zu liegen.
Hat jemand ne Idee??


mfg

Jens Büchert
 

Lesen sie die antworten

#1 Peter Götz
05/05/2009 - 13:27 | Warnen spam
Hallo Jens,

ich möchte gerne meine Artikeldaten mit einer
DataView filtern.



Du meinst vermutlich

DataView.RowFilter = "Filterausdruck" ?

Jetzt hab ich das Problem, dass meine Artikelnummern
Sonderzeichen enthalten.

bsp.:

4/28001/5.5*pt32b
4/28002/8*68b0.34
usw.

Bei der Eingabe der Artikelnummer wird nun eine
Exception ausgelöst.:

Fehler im Like-Operator: Das Zeichenfolgenmuster
'4/27103/5.5*3%' ist ungültig.



Wenn Dein Filterausdruck Sonderzeichen wie z.B.
den * und eine Reihe anderer Zeichen enthàlt, musst
Du diese in eckige Klammern [*] einschliessen

Möchtest Du z.B. nach einem Vorkommen von "3*5"
suchen würde das z.B. so aussehen:

DataView.RowFilter = "FeldName Like '*3[*]*'"

Mehr zum Umgang mit Sonderzeichen in Filterausdrücken
findest Du in der Online-Hilfe zu

DataColumn.Expression-Eigenschaft.


Hier mal ein ablauffàhiges Beispiel, welches Zufallsdaten
in einem DataGridView mal mit und mal ohne Filter
zeigt. Kopiere nachfolgenden Code in ein leeres
Formmodul (Form1.vb)

' /// Code in einem leeren Formmodul Form1.vb
Public Class Form1
Private mDT As DataTable
Private mDV As DataView
Private WithEvents mCM As CurrencyManager
Private WithEvents DGV As DataGridView
Private WithEvents chkFilter As CheckBox


Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

DGV = New DataGridView
With DGV

.SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - 60)

.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom

.DefaultCellStyle.Font = _
New Font("Arial", 12)

.ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)

End With
Me.Controls.Add(DGV)

chkFilter = New CheckBox
With chkFilter
.AutoSize = True
.Font = New Font("Arial", 10)
.Text = "Filter"

.Location = _
New Point(10, Me.ClientSize.Height - 35)

.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Bottom

End With
Me.Controls.Add(chkFilter)


CreateData()

DGV.DataSource = mDV
DGV.AutoResizeColumns()
End Sub

Private Sub CreateData()
Dim Rnd As New Random(Now.Millisecond)
Dim i As Integer
Dim DR As DataRow

mDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("Art", GetType(String))

For i = 1 To 20
DR = .NewRow
DR.Item(0) = i

DR.Item(1) = _
"4/28002/" & _
Rnd.Next(1, 50).ToString & _
"*" & Rnd.Next(1, 9).ToString

.Rows.Add(DR)
Next
.AcceptChanges()
End With

mDV = New DataView(mDT)
End Sub

Private Sub chkFilter_CheckedChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles chkFilter.CheckedChanged

If chkFilter.Checked Then
mDV.RowFilter = _
"Art Like '*3[*]*' OR Art Like '*4[*]*'"
Else
mDV.RowFilter = ""
End If
End Sub
End Class
' \\\ E N T E

Nach dem Programmstart zeigt das DataGridView
die ungefilterten Daten. Ein Klick auf die CheckBox
"Filter" setzt mDV.RowFilter. Im DGV werden nun
nur noch die gefilterten DS angezeigt.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen