質問

DataTableで検索結果を強調表示しようとしています。まず、DataTableの行をループし、一致するキーワードを検索してそれらの単語を強調表示する関数を呼び出してから、強調表示されたキーワードを含む新しい文字列でDataTableの行を更新します。

DataTable dtResultをDataListにバインドします。このコードブロックをSearchDemo関数に追加してキーワードを強調表示するまでは問題なく動作しました:


    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

この" verse"をバインドするDataList内のラベル列は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

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

以下の2つの関数は正常に動作します。

    '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のその他すべての行は、列「verse」の行を除き、適切に表示されます。キーワードを強調してみました。 SearchDemo内のループ(キーワードを強調表示するため)を削除すると、正常に機能します。 誰でもこれらのコードを見て、正しい方向を教えてくれますか?

役に立ちましたか?

解決

入力テキストはdtResult.Rows(i).ToStringで、これは&quot; System.Data.DataRow&quot;です。

この行を変更します:

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

宛先:

Dim strTemp As String = dtResult.Rows(i)("verse").ToString
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top