Errore: l'etichetta mostra System.Data.DataRow
Domanda
Ho cercato di evidenziare un risultato di ricerca in DataTable. Innanzitutto, eseguo il ciclo tra le righe di DataTable e chiamo una funzione per cercare una parola chiave abbinata per evidenziare quelle parole, quindi aggiorno la riga DataTable con una nuova stringa con parole chiave evidenziate.
Associo DataTable dtResult a DataList. Ha funzionato bene fino a quando non ho aggiunto questo blocco di codice alla funzione SearchDemo per evidenziare la parola chiave:
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
Un'etichetta all'interno del DataList ha associato questo " verso " colonna mostra System.Data.DataRow. Il resto mostra i dati corretti.
Vedere il seguente blocco di codice:
.........................
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
............................................... ..........
Queste due funzioni di seguito funzionano correttamente.
'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
Tutte le altre righe della DataTable dtResul sono visualizzate correttamente tranne le righe della colonna "verse" che ho cercato di evidenziare le parole chiave. Se rimuovo un loop (per evidenziare le parole chiave) all'interno di SearchDemo, funzionerà bene. Qualcuno può dare un'occhiata a questi codici e indicarmi la giusta direzione, per favore?
Soluzione
Il testo di input è dtResult.Rows (i) .ToString che è " System.Data.DataRow " ;.
Cambia questa riga:
Dim strTemp As String = dtResult.Rows(i).ToString
A:
Dim strTemp As String = dtResult.Rows(i)("verse").ToString