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 ?
Your input text is dtResult.Rows(i).ToString which is ‘System.Data.DataRow’.
Change this line:
To: