我一直在尝试在DataTable中突出显示搜索结果。首先,我循环遍历DataTable行并调用函数来查找匹配的关键字以突出显示这些单词,然后使用带有突出显示的关键字的新字符串更新DataTable行。
我将DataTable dtResult绑定到DataList。它工作正常,直到我将此代码块添加到SearchDemo函数以突出显示关键字:
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
DataList中的一个Label绑定了这个“verse”列,显示了System.Data.DataRow。其余的显示正确的数据。
请参阅以下代码块:
.........................
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
............................................... ..........
以下这两个功能正常。
'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
DataTable dtResul的每个其他行都正确显示,但我试图突出显示关键字的列“verse”的行除外。如果我在SearchDemo中删除一个循环(以突出显示关键字),它将正常工作。 任何人都可以查看这些代码并指出正确的方向吗?
答案 0 :(得分:0)
您的输入文本是dtResult.Rows(i).ToString,它是“System.Data.DataRow”。
更改此行:
Dim strTemp As String = dtResult.Rows(i).ToString
要:
Dim strTemp As String = dtResult.Rows(i)("verse").ToString