2016-04-08 15 views
0

Derzeit ist meine Datagridview mit einem Textfeld verknüpft, so wenn der Benutzer Buchstaben eingibt filtert das Raster.vb.net datagridview rowfilter Problem

Das Gitter ist mit einer Datentabelle wie folgt verbunden:

Grid.DataSource = dtProducts.DefaultView 

Dieses Verfahren zur Filterung ist:

'Filter Source Grid according to what user types to textbox 
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles txtProBox.TextChanged 
    dtProducts.DefaultView.RowFilter = "[Product] LIKE '*" & txtProBox.Text & "*'" 
End Sub 

Das funktioniert ganz gut, bis ich einen akzentuierten Buchstaben in das Textfeld haben. Wie Sie in dem mitgelieferten Screenshot sehen können, wenn ich nur die ersten 2 Buchstaben des Titels "Kígyóuborka" tippe, erscheint das Ergebnis gut. Aber wenn ich den dritten Buchstaben tippe, der ein "g" ist, verschwindet der Titel. Nach dem Tippen des vierten Buchstabens, der in diesem Fall ein "y" ist, springt der Titel jedoch wieder zurück. Es macht dieses seltsame Verhalten mit ein paar Titeln und alles, was ich selbst herausfinden konnte, ist etwas mit akzentuierten Zeichen zu tun.

Ist jemals jemand auf dieses Problem gestoßen?

Thanks :)

rowfilter isuee

+0

mit diesem Code Watch out! Dies ist der Prototyp für SQL-Injection-Angriffe. –

+0

[Diese Seite] (http://www.csharp-examples.net/dataview-rowfilter/) hat viele Beispiele, wie man RowFilter richtig benutzt. Meine erste Vermutung ist, dass das erste '*' redundant ist: '[Product] LIKE '" & txtProBox.Text & "*'" '. Als @JochenvanWylick schrieb escape zuerst die Zeichenfolge aus Ihrem Textfeld vor dem RowFilter. –

+0

Nach zu dem Link, den du mir gegeben hast: dataView.RowFilter = "Name LIKE '% jo%'" // Werte, die 'jo' enthalten "Also sollte mein Code einfach funktionieren. Und wie würdest du die Injektion vermeiden? –

Antwort

0
dtProducts.DefaultView.RowFilter = "[Product] LIKE '%" & txtProBox.Text & "%'" 
+0

Danke für die schnelle Antwort, aber leider hat es das Problem nicht behoben. –

+0

Ich bin mir nicht sicher, aber könnten Sie versuchen, ändern & auf + –

+0

'%': Filter auf Produkte, die ** die angegebene Zeichenfolge ** enthalten. '*': filtert Produkte, die ** mit der angegebenen Zeichenfolge beginnen **. Je nach Ihren Bedürfnissen müssen Sie sich für eines entscheiden. –