2009-03-05 8 views
0

Ich habe versucht, ein Suchergebnis in DataTable hervorzuheben. Zuerst durchlaufe ich Zeilen von DataTable und rufe eine Funktion auf, um nach einem übereinstimmenden Schlüsselwort zu suchen, um diese Wörter hervorzuheben, und aktualisiere dann die DataTable-Zeile mit einer neuen Zeichenfolge mit hervorgehobenen Schlüsselwörtern.Fehler - Lable zeigt System.Data.DataRow

Ich binde das DataTable dtResult an die DataList. Es funktionierte gut, bis ich diesen Code-Block zu SearchDemo Funktion hinzugefügt, um das Schlüsselwort zu markieren:


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 

Ein Etikett im Innern des Datalist diese „Vers“ Säule gebunden zeigt System.Data.DataRow. Der Rest zeigt die korrekten Daten.

Bitte lesen Sie den folgenden Codeblock:

.........................

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 

... .................................................. ....

Diese zwei Funktionen unten funktionieren gut.

'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 

Alle anderen Zeilen der Datatable dtResul ordnungsgemäß mit Ausnahme der Zeilen der Spalte „Vers“ gezeigt, dass ich die Keywords zu markieren versucht. Wenn ich eine Schleife (um Schlüsselwörter hervorzuheben) innerhalb des SearchDemo entferne, funktioniert es gut. Kann mir jemand diese Codes ansehen und mich bitte in die richtige Richtung weisen?

Antwort

0

Ihr Eingabetext ist dtResult.Rows (i) .ToString, was "System.Data.DataRow" ist.

Ändern Sie diese Zeile:

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

An:

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

Dank .. ah .. meine Augen .. würde mich etwas dagegen sagen, wie wie dies auch zu debuggen sth, wenn möglich –

+0

Die erste Schritt ist anzunehmen, dass der Fehler in Ihrem Code ist. http://www.codinghorror.com/blog/archives/001079.html Von dort aus arbeitete ich einen Haltepunkt an der Spitze des Codes und beobachtete die Variablenwerte, als ich durchging. Sie hätten den strTemp-Wert ziemlich schnell gesehen. – Mufaka

+0

Vielen Dank. Habt einen schönen Tag: D –