Domanda

Ho cercato di evidenziare un risultato di ricerca in DataTable. Innanzitutto, eseguo il ciclo tra le righe di DataTable e chiamo una funzione per cercare una parola chiave abbinata per evidenziare quelle parole, quindi aggiorno la riga DataTable con una nuova stringa con parole chiave evidenziate.

Associo DataTable dtResult a DataList. Ha funzionato bene fino a quando non ho aggiunto questo blocco di codice alla funzione SearchDemo per evidenziare la parola chiave:


    For i = 0 To dtResult.Rows.Count - 1 Step 1

        Dim strTemp As String = dtResult.Rows(i).ToString
        strVerse = blHelper.Highlight(s, strTemp)
        dtResult.Rows(i)("verse") = strVerse
    Next

Un'etichetta all'interno del DataList ha associato questo " verso " colonna mostra System.Data.DataRow. Il resto mostra i dati corretti.

Vedere il seguente blocco di codice:

.........................

Public Shared Function SearchDemo(ByVal s As String) As DataTable

    Dim dtResult As New DataTable

    dtResult = SearchDetail(s) 

    Dim i As Integer = dtResult.Rows.Count

    For i = 0 To dtResult.Rows.Count - 1 Step 1

        Dim strTemp As String = dtResult.Rows(i).ToString
        strVerse = blHelper.Highlight(s, strTemp)
        dtResult.Rows(i)("verse") = strVerse

    Next

    Return dtResult
End Function

............................................... ..........

Queste due funzioni di seguito funzionano correttamente.

    'Highlight the keywords in the returned result

Public Shared Function Highlight(ByVal Search_Str As String, ByVal InputTxt As String) As String

    ' Setup the regular expression and add the Or operator.
    Dim RegExp As Regex = New Regex(Search_Str.Replace(" ", "|").Trim(), RegexOptions.IgnoreCase)

    ' Highlight keywords by calling the MatchEvaluator delegate each time a keyword is found.
    Highlight = RegExp.Replace(InputTxt, New MatchEvaluator(AddressOf ReplaceKeyWords))

    ' Set the Regex to nothing.
    RegExp = Nothing

End Function

Public Shared Function ReplaceKeyWords(ByVal m As Match) As String

    Return "<b>" & m.Value & "</b>"

End Function

Tutte le altre righe della DataTable dtResul sono visualizzate correttamente tranne le righe della colonna "verse" che ho cercato di evidenziare le parole chiave. Se rimuovo un loop (per evidenziare le parole chiave) all'interno di SearchDemo, funzionerà bene. Qualcuno può dare un'occhiata a questi codici e indicarmi la giusta direzione, per favore?

È stato utile?

Soluzione

Il testo di input è dtResult.Rows (i) .ToString che è " System.Data.DataRow " ;.

Cambia questa riga:

Dim strTemp As String = dtResult.Rows(i).ToString

A:

Dim strTemp As String = dtResult.Rows(i)("verse").ToString
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top