DataTable에서 검색 결과를 강조 표시하려고했습니다. 먼저 DataTable의 행을 반복하고 일치하는 키워드를 찾아 해당 단어를 강조 표시 한 다음 DataTable 행을 강조 표시된 키워드가있는 새 문자열로 업데이트하는 함수를 호출합니다.오류 - Lable에서 System.Data.DataRow를 보여줍니다.
DataTable dtResult를 DataList에 바인딩합니다. 나는 키워드 강조 SearchDemo 기능이 코드 블록을 추가 할 때까지 잘 작동 : DataList에 내부의 라벨이 "절"열을 바인딩
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
을 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의 다른 모든 행은 내가 키워드를 강조하려고 열 "절"의 행을 제외하고는 제대로 표시됩니다. SearchDemo 내부에서 루프를 제거하여 키워드를 강조 표시하면 정상적으로 작동합니다. 누구나이 코드를보고 올바른 방향으로 나를 가리 키도록 할 수 있습니까?
감사합니다 .. 아 .., 어떻게이 같은 STH 디버깅을 가르쳐 수 –
첫 번째 경우 단계는 오류가 귀하의 코드에 있다고 가정하는 것입니다. http://www.codinghorror.com/blog/archives/001079.html 거기에서부터 코드의 '상단'에 중단 점을 설정하고 단계별로 변수 값을 보았습니다. strTemp 값을 꽤 빨리 보았을 것입니다. – Mufaka
고마워요. 좋은 하루 보내세요 : D –