Question

I've been trying to highlight a search result in DataTable. First, I loop through rows of DataTable and call a function to look for a matched keyword to highlight those words, then update DataTable row with a new string with highlighted keywords.

I bind the DataTable dtResult to the DataList. It worked fine until I added this code block to SearchDemo function to highlight the keyword :


    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

A Label inside the DataList bound this "verse" column shows System.Data.DataRow. The rest shows the correct data.

Please see the following code block :

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

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

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

These two functions below works fine.

    '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

Every other rows of the DataTable dtResul are shown properly except the rows of column "verse" that I tried to highlight the keywords. If I remove a loop (to highlight keywords) inside the SearchDemo, it will works fine. Can anyone have a look at these codes and point me to the right direction please ?

Was it helpful?

Solution

Your input text is dtResult.Rows(i).ToString which is "System.Data.DataRow".

Change this line:

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

To:

Dim strTemp As String = dtResult.Rows(i)("verse").ToString
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top