Question

J'ai essayé de mettre en évidence un résultat de recherche dans DataTable. Tout d'abord, je parcoure les lignes de DataTable et appelle une fonction pour rechercher un mot clé correspondant afin de mettre en évidence ces mots, puis met à jour la ligne de DataTable avec une nouvelle chaîne contenant des mots clés en surbrillance.

Je lie le DataTable dtResult à la DataList. Cela a bien fonctionné jusqu'à ce que j'ajoute ce bloc de code à la fonction SearchDemo pour mettre en évidence le mot clé:

    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

Une étiquette à l'intérieur de la liste de données lie ce "verset". colonne affiche System.Data.DataRow. Le reste montre les données correctes.

Veuillez consulter le bloc de code suivant:

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

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

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

Ces deux fonctions ci-dessous fonctionnent correctement.

    '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

Toutes les autres lignes du DataTable dtResul sont affichées correctement, à l'exception des lignes de la colonne "verse". que j'ai essayé de mettre en évidence les mots-clés. Si je supprime une boucle (pour mettre en surbrillance des mots-clés) dans SearchDemo, cela fonctionnera correctement. Quelqu'un peut-il consulter ces codes et m'indiquer la bonne direction, s'il vous plaît?

Était-ce utile?

La solution

Votre texte d'entrée est dtResult.Rows (i) .ToString qui correspond à "System.Data.DataRow".

Modifiez cette ligne:

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

À:

Dim strTemp As String = dtResult.Rows(i)("verse").ToString
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top