Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.lang.visual-basic > #19963 > unrolled thread

Filtro Checked listbox

Started byMarco75 <marcoporzi75@gmail.com>
First post2022-03-30 01:18 -0700
Last post2022-04-06 03:49 -0700
Articles 4 — 2 participants

Back to article view | Back to it.comp.lang.visual-basic


Contents

  Filtro Checked listbox Marco75 <marcoporzi75@gmail.com> - 2022-03-30 01:18 -0700
    Re: Filtro Checked listbox Marco75 <marcoporzi75@gmail.com> - 2022-03-30 06:30 -0700
      Re: Filtro Checked listbox "Freccia (VegetaSSj)" <NIENTESPAMfreccia_vegetassj@hotmail.invalid> - 2022-04-03 15:53 +0200
        Re: Filtro Checked listbox Marco75 <marcoporzi75@gmail.com> - 2022-04-06 03:49 -0700

#19963 — Filtro Checked listbox

FromMarco75 <marcoporzi75@gmail.com>
Date2022-03-30 01:18 -0700
SubjectFiltro Checked listbox
Message-ID<ea4bf7ed-1ad6-4329-aa13-9b29ef4617d0n@googlegroups.com>
ciao,
ho una Checkedlistbox popolata tramite una query da SQL Server.
vorrei inserire un campo ricerca dove, man mano che digito esegue il filtro sugli item restituendomi quelli corrispondenti.

ho provato questo codice, funziona nel senso che mi porta al primo item che trova basato su quanto sto digitando, ma vorrei che andasse a filtrare mostrando solo quello che corrisponde e non portarmi all'item mostrando comunque tutto il resto, è possibile?

questo il codice:
Private Sub tb_Cerca_TextChanged(sender As Object, e As EventArgs) Handles tb_Cerca.TextChanged

        tb_Cerca.Text = UCase(tb_Cerca.Text)
        tb_Cerca.SelectionStart = tb_Cerca.TextLength

        CklbSelezionaFlowChart.SelectedItems.Clear()
        If tb_Cerca.Text <> "" Then
            Dim count As Integer = (CklbSelezionaFlowChart.Items.Count - 1)
            Dim words As String
            Dim a As Integer

            For a = 0 To count
                words = CklbSelezionaFlowChart.Items.Item(a)
                If words.ToUpper.Contains(tb_Cerca.Text.ToUpper) Then
                    CklbSelezionaFlowChart.SelectedItems.Add(CklbSelezionaFlowChart.Items.Item(a))
                    CklbSelezionaFlowChart.Sorted = True
                End If
            Next
        End If

grazie 
Marco

[toc] | [next] | [standalone]


#19964

FromMarco75 <marcoporzi75@gmail.com>
Date2022-03-30 06:30 -0700
Message-ID<5a8dfbb1-b70f-49e5-b930-e1d15aa220c5n@googlegroups.com>
In reply to#19963
Il giorno mercoledì 30 marzo 2022 alle 10:18:33 UTC+2 Marco75 ha scritto:
> ciao, 
> ho una Checkedlistbox popolata tramite una query da SQL Server. 
> vorrei inserire un campo ricerca dove, man mano che digito esegue il filtro sugli item restituendomi quelli corrispondenti. 
> 
> ho provato questo codice, funziona nel senso che mi porta al primo item che trova basato su quanto sto digitando, ma vorrei che andasse a filtrare mostrando solo quello che corrisponde e non portarmi all'item mostrando comunque tutto il resto, è possibile? 
> 
> questo il codice: 
> Private Sub tb_Cerca_TextChanged(sender As Object, e As EventArgs) Handles tb_Cerca.TextChanged 
> 
> tb_Cerca.Text = UCase(tb_Cerca.Text) 
> tb_Cerca.SelectionStart = tb_Cerca.TextLength 
> 
> CklbSelezionaFlowChart.SelectedItems.Clear() 
> If tb_Cerca.Text <> "" Then 
> Dim count As Integer = (CklbSelezionaFlowChart.Items.Count - 1) 
> Dim words As String 
> Dim a As Integer 
> 
> For a = 0 To count 
> words = CklbSelezionaFlowChart.Items.Item(a) 
> If words.ToUpper.Contains(tb_Cerca.Text.ToUpper) Then 
> CklbSelezionaFlowChart.SelectedItems.Add(CklbSelezionaFlowChart.Items.Item(a)) 
> CklbSelezionaFlowChart.Sorted = True 
> End If 
> Next 
> End If 
> 
> grazie 
> Marco


ho trovato un codice che fa al caso mio:

If Trim(tb_Cerca.Text) = "" Then Exit Sub

        Dim lb As ListBox = New ListBox
        Dim s As Integer = 0
        For s = 0 To CklbSelezionaFlowChart.Items.Count - 1
            If InStr(CklbSelezionaFlowChart.Items(s).ToString, tb_Cerca.Text) Then
                lb.Items.Add(CklbSelezionaFlowChart.Items(s))
            End If
        Next

        CklbSelezionaFlowChart.Items.Clear()
        For s = 0 To lb.Items.Count - 1
            CklbSelezionaFlowChart.Items.Add(lb.Items(s).ToString)
        Next
        lb.Dispose()

così la listbox mostra solo gli Item a seguito del filtro però se cancello tutto o parte di quanto inserito in TextBox non ripropone gli item che ha filtrato ma devo rieseguire la query..
in attesa di cortese risposta provo a vedere se risolvo
grazie
Marco

[toc] | [prev] | [next] | [standalone]


#19966

From"Freccia (VegetaSSj)" <NIENTESPAMfreccia_vegetassj@hotmail.invalid>
Date2022-04-03 15:53 +0200
Message-ID<1o8f5thmti6lt.al6bptnlstn4$.dlg@40tude.net>
In reply to#19964
Su "it.comp.lang.visual-basic",  ==Marco75=> ha scritto: 

> così la listbox mostra solo gli Item a seguito del filtro però se
> cancello tutto o parte di quanto inserito in TextBox non ripropone
> gli item che ha filtrato ma devo rieseguire la query.. in attesa di
> cortese risposta provo a vedere se risolvo

Fatti una classe di appoggio es.
Class MyItem
	Property Value as string
End Class

Poi all'avvio ti carichi un List(Of Item), e quando cerchi con Linq fai
Dim listaFiltrata= listaCompleta.Where(Function (t)
t.Value.ToUpper().Contains(tb_Cerca.Text.ToUpper())

A questo punto chiami una sub che carica gli elementi spuntati.

Se ti serve tenere in memoria le spunte degli elementi non filtrati
aggiunti una proprietà Checked alla classe MyItem.


-- 
Freccia@Bulldozer63 :D

[toc] | [prev] | [next] | [standalone]


#19967

FromMarco75 <marcoporzi75@gmail.com>
Date2022-04-06 03:49 -0700
Message-ID<818bc152-101b-46bd-9e51-b33c6ef7db63n@googlegroups.com>
In reply to#19966
Il giorno domenica 3 aprile 2022 alle 15:53:04 UTC+2 Freccia (VegetaSSj) ha scritto:
> Su "it.comp.lang.visual-basic", ==Marco75=> ha scritto: 
> 
> > cosģ la listbox mostra solo gli Item a seguito del filtro perņ se
> > cancello tutto o parte di quanto inserito in TextBox non ripropone 
> > gli item che ha filtrato ma devo rieseguire la query.. in attesa di 
> > cortese risposta provo a vedere se risolvo
> Fatti una classe di appoggio es. 
> Class MyItem 
> Property Value as string 
> End Class 
> 
> Poi all'avvio ti carichi un List(Of Item), e quando cerchi con Linq fai 
> Dim listaFiltrata= listaCompleta.Where(Function (t) 
> t.Value.ToUpper().Contains(tb_Cerca.Text.ToUpper()) 
> 
> A questo punto chiami una sub che carica gli elementi spuntati. 
> 
> Se ti serve tenere in memoria le spunte degli elementi non filtrati 
> aggiunti una proprietą Checked alla classe MyItem. 
> 
> 
> -- 
> Freccia@Bulldozer63 :D
grazie, non so perchè non ho ricevuto la mail della tua risposta che vedo solo ora...
Marco

[toc] | [prev] | [standalone]


Back to top | Article view | it.comp.lang.visual-basic


csiph-web