views:

525

answers:

1

Hi,

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 ?

A: 

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
Mufaka
Thanks.. ah.. my eyes.. would mind tell me how to debug sth like this also, if possible
Angkor Wat
The first step is to assume the error is in your code. http://www.codinghorror.com/blog/archives/001079.html Working from there, I'd set a breakpoint at the 'top' of the code and watched the variable values as I stepped through. You would have seen the strTemp value pretty quickly.
Mufaka
Thanks so much. Have a good day :D
Angkor Wat