Erreur - Lable montre System.Data.DataRow
Question
J'ai essayé de mettre en évidence un résultat de recherche dans DataTable. Tout d'abord, je parcoure les lignes de DataTable et appelle une fonction pour rechercher un mot clé correspondant afin de mettre en évidence ces mots, puis met à jour la ligne de DataTable avec une nouvelle chaîne contenant des mots clés en surbrillance.
Je lie le DataTable dtResult à la DataList. Cela a bien fonctionné jusqu'à ce que j'ajoute ce bloc de code à la fonction SearchDemo pour mettre en évidence le mot clé:
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
Une étiquette à l'intérieur de la liste de données lie ce "verset". colonne affiche System.Data.DataRow. Le reste montre les données correctes.
Veuillez consulter le bloc de code suivant:
.........................
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
............................................... ..........
Ces deux fonctions ci-dessous fonctionnent correctement.
'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
Toutes les autres lignes du DataTable dtResul sont affichées correctement, à l'exception des lignes de la colonne "verse". que j'ai essayé de mettre en évidence les mots-clés. Si je supprime une boucle (pour mettre en surbrillance des mots-clés) dans SearchDemo, cela fonctionnera correctement. Quelqu'un peut-il consulter ces codes et m'indiquer la bonne direction, s'il vous plaît?
La solution
Votre texte d'entrée est dtResult.Rows (i) .ToString qui correspond à "System.Data.DataRow".
Modifiez cette ligne:
Dim strTemp As String = dtResult.Rows(i).ToString
À:
Dim strTemp As String = dtResult.Rows(i)("verse").ToString