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 ?