2

私はstackoverflowを検索し、見つけたコードを実装しようとしましたが、役に立ちませんでした。テキストが変更されたら、テキストボックス内の現在のテキストを使用してリストビューアイテムをフィルタリングし(一致するように閉じられていないアイテムは削除されます)、列に含まれているものだけが残ります。

これが私が意味することの例です:

検索:「ジョージ」

|1|アンダーソンシルバ|アンダーソンシルバは...|のチャンピオンです

| 2 | ジョルジュサンピエール| ジョルジュは...|のチャンピオンです

| 3 | ジョルジュソトロポリス| ジョルジュソトロポリスはライト級の戦闘機です|

この検索で​​は、2行目と3行目のみが返されます。最初の行は省略され、表示されません。用語を消去すると、表示されます。

これが私が現在持っているコードです:

Private Sub tbSearch_TextChanged(sender As Object, e As System.EventArgs) Handles tbSearch.TextChanged
    lwArticles.BeginUpdate()

    If tbSearch.Text.Trim().Length = 0 Then
        'Clear listview
        lwArticles.Clear()

        'If nothing is in the textbox make all items appear
        For Each item In originalListItems
            lwArticles.Items.Add(item)
        Next
    Else
        'Clear listview
        lwArticles.Clear()

        'Go through each item in the original list and only add the ones which contain the search text
        For Each item In originalListItems
            If item.Text.Contains(tbSearch.Text) Then
                lwArticles.Items.Add(item)
            End If
        Next
    End If
    lwArticles.EndUpdate()

End Sub

動作しているようですが、tbSearchに何かを入力すると、リストビューのアイテムが表示されません。実行中の検索により、アイテムの数が多い/少ない場合に応じて、スクロールバーが小さくなります。私の問題はそれらが見えないようです

ありがとうございました!

4

3 に答える 3

2

Listview.Clearは、アイテム、列、およびグループを消去します。アイテムを一掃したいだけのようですので、lwArticles.Items.Clear代わりに電話してくださいlwArticles.Clear

于 2012-12-19T19:19:08.323 に答える
2

私は別のアプローチを提案します-最初DataTableにあなたのオリジナルのアイテムに基づいてを作成します。次に、を作成し、それをあなたのDataView時点で割り当てDataSourceますListView。これで、を変更できDataView.RowFilter、リストが自動的に更新されるため、フィルターに一致するアイテムのみが表示されます。このアプローチを使用すると、毎回すべてを最初から再作成する必要がなく、TextChanged非常にシンプルで保守しやすくなります。RowFilter対応するものDataViewがすでに作成されている場合は、変更するだけです。

于 2013-01-08T15:45:47.077 に答える
1

これが私の質問の最終的な答えです:

Private originalListItems As New List(Of ListViewItem) 'this gets populated on form load

Private Sub tbSearch_TextChanged(sender As Object, e As System.EventArgs) Handles tbSearch.TextChanged
    lwArticles.BeginUpdate()

    If tbSearch.Text.Trim().Length = 0 Then
        'Clear listview
        lwArticles.Items.Clear()

        'If nothing is in the textbox make all items appear
        For Each item In originalListItems
            lwArticles.Items.Add(item)
        Next
    Else
        'Clear listview
        lwArticles.Items.Clear()

        'Go through each item in the original list and only add the ones which contain the search text
        For Each item In originalListItems
            If item.Text.Contains(tbSearch.Text) Then
                lwArticles.Items.Add(item)
            End If
        Next
    End If

    lwArticles.EndUpdate()
End Sub

lwArticles.Clear()がすべてをクリアすることを説明したDan-oの功績。リストビューのアイテムのみをクリアするには、lwArticles.Items.Clear()が必要であると彼は私に通知しました。

于 2012-12-19T19:22:44.720 に答える