Ricerca in listview

giovedì 28 agosto 2008 - 16.26

ilario Profilo | Senior Member

ciao

dovrei fare una ricerca in una sola Colonna di una listview

ho provato con

.....
foundItem = lswarticolo.Columns(numcol).ListView.FindItemWithText(txtricerca.Text)
....

ma trova la prima stringa presente ma la ricerca è in tutte le colonne,
è possibile fare una ricerca sono e soltanto in una colonna specifica?

grazie mille

ilario

aiedail92 Profilo | Expert

Ciao

Non esiste un metodo già pronto per fare quello di cui hai bisogno, ma puoi scrivere una funzione che lo fa per te. Ad esempio potresi usare una funzione come questa:

/// <summary> /// ritorna l'indice dell'oggetto col testo corrispondente /// </summary> public static int FindItemIndexInColumn(ListView listView, int column, string text) { //Se la colonna è la 0, ricerca negli oggetti della colonna if (column == 0) { return listView.FindItemWithText(text, false, 0).Index; } //altrimenti ricerca fra i sotto-oggetti else { for (int i = 0; i < listView.Items.Count; i++) { if (listView.Items[i].SubItems[column].Text == text) { return i; } } } return -1; }

Luca

ilario Profilo | Senior Member

ti ringrazio molto

sono partito dalla tua funzione e ne ho fatta una aggiungendo la ricerca per parte del testo e case sensitive

per il momento funziona, mi potresti dire se l'ho scritta correttamente ?

Public Function RicercainLsw(ByVal NomeLista As ListView, ByVal RicercaFull As Boolean, ByVal Colonna As Integer, ByVal Testo As String, ByVal Comparazione As StringComparison) As Integer
Dim i As Integer = 0

' se ricerca in tutta la lista

If RicercaFull = True Then

Return NomeLista.FindItemWithText(Testo).Index

' altrimenti ricerca nella colonna specifica
Else

For i = 0 To NomeLista.Items.Count - 1

If NomeLista.Items(i).SubItems(Colonna).Text.StartsWith(Testo, Comparazione) = True Then
Return i
End If

Next


Return -1

End If

End Function


grazie [

aiedail92 Profilo | Expert

Sì, la funzione lavora correttamente. Apporto solo una piccola modifica per evitare il sollevamento di un'eccezione quando non viene trovato nulla con FindItemWithText (il "bug" c'era anche nella mia versione )

Public Function RicercainLsw(ByVal NomeLista As ListView, _ ByVal RicercaFull As Boolean, ByVal Colonna As Integer, _ ByVal Testo As String, ByVal Comparazione As StringComparison) As Integer ' se ricerca in tutta la lista If RicercaFull = True Then Dim item As ListViewItem = NomeLista.FindItemWithText(Testo) 'Evita il sollevamento di una NullReferenceException If (item Is Nothing) Then Return -1 End If Return item.Index ' altrimenti ricerca nella colonna specifica Else For i As Integer = 0 To NomeLista.Items.Count - 1 If NomeLista.Items(i).SubItems(Colonna).Text.StartsWith(Testo, Comparazione) Then Return i End If Next Return -1 End If End Function

Luca

ilario Profilo | Senior Member

perfetto non avevo pensato a quello

grazie
ciao
ilario
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5