2009-03-05 8 views
0

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 내부에서 루프를 제거하여 키워드를 강조 표시하면 정상적으로 작동합니다. 누구나이 코드를보고 올바른 방향으로 나를 가리 키도록 할 수 있습니까?

답변

0

입력 텍스트는 "System.Data.DataRow"인 dtResult.Rows (i) .ToString입니다.

변경이 라인 :

Dim strTemp As String = dtResult.Rows(i).ToString 

사람 : 내 눈이 .. 될까요

Dim strTemp As String = dtResult.Rows(i)("verse").ToString 
+0

감사합니다 .. 아 .., 어떻게이 같은 STH 디버깅을 가르쳐 수 –

+0

첫 번째 경우 단계는 오류가 귀하의 코드에 있다고 가정하는 것입니다. http://www.codinghorror.com/blog/archives/001079.html 거기에서부터 코드의 '상단'에 중단 점을 설정하고 단계별로 변수 값을 보았습니다. strTemp 값을 꽤 빨리 보았을 것입니다. – Mufaka

+0

고마워요. 좋은 하루 보내세요 : D –