lunedì 31 ottobre 2011

[VB.NET] Filtro BindingSource per Word Search

Descrizione :
Un metodo per costruire un filtro di ricerca da passare ad un BindingSource, allo scopo di filtrare frasi di testo di qualsiasi dimensione in base ad un numero variabile di parole chiave.

+ Articolo :

Per "parola" si intende una particolare substring del testo, che deve essere presa singolarmente, e ignorata se invece è solo parte di un'altra parola, che la contiene.
Nello snippet che segue si parte da un array di parole da ricercare nel testo. Tutte le parole in array verranno poste in AND tra di loro, e il BindingSource restituirà solo le frasi corripondenti al Campo associato ( nomeCampo, in questo esempio "testo" ) che contengono almeno una volta tutte le parole chiave.

Le parole da ricercare vanno messe in AND.
Per ogni parola chiave in array occorrono 3 LIKE, da mettere in OR tra loro :

--> testo LIKE 'parola %' ( se la parola è la prima di testo )
--> testo LIKE '% parola %' ( se la parola è in una qualsiasi posizione intermedia nel testo )
--> testo LIKE '% parola' ( se la parola è l'ultima di testo )

Il codice :

        Dim nomeCampo As String = "testo"
        Dim sbFilter As New System.Text.StringBuilder

        'Più parole da mettere in AND
        Dim paroleFiltro() As String = {"parola1", "parola2", "parola3"}
        Dim parolaFiltro As String

        'Costruzione filtro
        For i As Integer = 0 To paroleFiltro.Length - 1

            'Caratteri Escape
            parolaFiltro = paroleFiltro(i)
            parolaFiltro = parolaFiltro.Replace("'", "''").Replace("%", "[%]").Replace("*", "[*]")
            sbFilter.Append("(" & nomeCampo & " LIKE '" & parolaFiltro & " %'" & _
                            " OR " & nomeCampo & " LIKE '% " & parolaFiltro & " %'" & _
                            " OR " & nomeCampo & " LIKE '% " & parolaFiltro & "')")
            If i < paroleFiltro.Length - 1 Then sbFilter.Append(" AND ")

        Next

        BS.Filter = sbFilter.ToString

Dove BS è il BindingSource collegato all'origine dati che contiene il Campo "testo".
Per ogni parola in array il codice provvede all'aggiunta dei caratteri di escape necessari ad evitare errori con eventuali parole chiave che contengano %, ', *.

Funziona con un qualsiasi numero di parole da ricercare, da 1 a N, e quale che sia il numero e la posizione nel testo in cui tali parole vengono eventualmente trovate.

+ Fine Articolo.

Un Click su "Mi Piace" è il modo migliore per ringraziare l'autore di questo articolo.



0 commenti:

Posta un commento

Favorites Twitter Facebook Delicious Digg Stumbleupon More

 
Design by Free WordPress Themes Modificato da MarcoGG