Pregunta

He estado tratando de resaltar un resultado de búsqueda en DataTable. Primero, recorro filas de DataTable y llamo a una función para buscar una palabra clave que coincida y resalte esas palabras, luego actualizo la fila de DataTable con una nueva cadena con palabras clave resaltadas.

Enlace el DataTable dtResult a la DataList. Funcionó bien hasta que agregué este bloque de código a la función SearchDemo para resaltar la palabra clave:


    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

Una etiqueta dentro de la lista de datos enlaza este " verso " La columna muestra System.Data.DataRow. El resto muestra los datos correctos.

Consulte el siguiente bloque de código:

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

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

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

Estas dos funciones a continuación funcionan bien.

    '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

Todas las demás filas de DataTable dtResul se muestran correctamente, excepto las filas de la columna " verse " que intenté resaltar las palabras clave Si elimino un bucle (para resaltar palabras clave) dentro de SearchDemo, funcionará bien. ¿Alguien puede mirar estos códigos y señalarme la dirección correcta, por favor?

¿Fue útil?

Solución

Su texto de entrada es dtResult.Rows (i) .ToString que es " System.Data.DataRow " ;.

Cambia esta línea:

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

Para:

Dim strTemp As String = dtResult.Rows(i)("verse").ToString
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top