2012-12-19 2 views
2

나는 stackoverflow 검색 및 찾았지만 아무 소용이 코드를 시도했다. 텍스트가 바뀌면서 텍스트 상자의 현재 텍스트를 사용하여 목록보기 항목을 필터링하고 (일치되도록 닫히지 않는 항목이 제거됨) 열에 포함 된 내용 만 남겨 둡니다.VB.NET Listview Textchanged 검색

가 검색 : 여기

무슨 뜻인지의 예 | 1 | 앤더슨 실바 | 앤더슨 실바의 챔피언입니다 ... "조지"

|

| 2 | 조르쥬 세인트 피에르 | 조르쥬는에있는 전사이다 ... |

| 3 | 조르쥬 Sotoropolis | 조르쥬 Sotoropolis는 경량 부문의 전투기입니다 |

이 검색에서는 행 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에 뭔가를 입력하면 나는 목록보기 항목을 볼 수 없습니다 : 여기

내가 현재 가지고있는 코드입니다. 검색이 실행되어 더 많거나 적은 항목이 있는지에 따라 스크롤 막대가 더 작아 지거나 커집니다. 내 문제가 보이지 않는 것 같습니다.

고마워요!

+0

"작동하지 않음"은 문제를 충분히 자세히 설명하지 않습니다. 작동하지 않는 것에 정교한 것. –

+0

아무 반응이 없습니다. 즉, 모든 것을 제거하는 것 외에는 아무 것도하지 않기 때문에 코드를 삽입하지 않았을 수도 있습니다. – Alex

+0

그럼 뭐야? 코드가 아무 것도하지 않거나 코드가 모든 것을 제거합니까? –

답변

2

Listview.Clear는 항목, 열 및 그룹을 지 웁니다. 것입니다) 설명 댄 - 오에

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 (: 그것은 당신이 여기에 내 질문의 마지막 대답의 항목 만 쓸어하려는, 그래서 lwArticles.Clear

+0

정말 고마워요. 내가 놓친 모든 것 : D! – Alex

1

대신 lwArticles.Items.Clear 전화 표시 모두을 지우십시오. 그는 필자에게 필 요가 있음을 알렸다. 항목 목록보기의 항목 만 지우려면 지우기()를 클릭하십시오.

+1

다른 사람이 답변을 제공 한 경우 자신의 답변을 게시하지 마십시오. 자발적으로 게임을 "게임"하고 사람들이 귀하의 질문에 대답하도록 격려합니다. SO는 좋은 응답을 장려하기 위해 평판 시스템에 의존합니다. FAQ에서 자세히 설명 할 수 있습니다. TLDR 버전은 최종 코드를 게시 할 필요가 없으며 정답을 얻으면 표시합니다. –

2

다른 방법을 제안합니다. 먼저 원래 항목을 기반으로 DataTable을 만듭니다. 그런 다음 DataView을 작성하고 ListViewDataSource으로 지정하십시오. 이제 DataView.RowFilter을 변경할 수 있으며 목록이 자동으로 업데이트되므로 필터와 일치하는 항목 만 표시됩니다. 이 방법을 사용하면 매번 처음부터 모든 것을 다시 만들 필요가 없으며 TextChanged은 매우 단순하고 유지 보수가 용이 해집니다. 해당 DataView이 이미 생성 된 경우에만 RowFilter이 변경됩니다.

관련 문제