Newsgroup: it.comp.appl.access
Titolo: mantenere elementi selezionati in casella di riepilogo

Buongiorno a tutti, mi spiego meglio ho aggiunto una casella di testo per filtrare opportunamente una casella di riepilogo 
 
poi seleziono gli elementi interessati nella casella di riepilogo ma quando applico un nuovo filtro perdo la selezione precedente
 
vorrei in qualche modo (non so come) alla fine avere tutti gli elementi selezionati con i vari filtri applicati
 
possibile?

Si basta memorizzarli... ed ogni volta che applichi il filtro, cicli gli Items della ListBox e se quello puntato è presente nell'elenco dei Memorizzati forzi la Selezione a TRUE.
 
@Alex

 @Alex
 
Ho provato a creare una textbox e ad ogni click della casella di riepilogo
textbox = textbox & me.miacasellariepilogo.itemselected
 
ma non funziona, qualche esempio?


Hai guardato la Guida cosa dice in relazione alla proprietà che non hai nemmeno scritto in modo corretto...?
 
Property ItemsSelected
 
Questa proprietà in realtà è una Collection di Items, tutti quelli selezionati, quindi per leggere cosa contiene devi fare un CICLO, nella guida trovi anche l'esempio... non è complicato leggere la guida....!!!!
 
https://docs.microsoft.com/en-us/office/vba/api/access.listbox.itemsselected
 
 
@Alex


no non ce la posso fare, Alex lascia stare non aiutarmi già adesso c'è pure il corna virus manchi solo tu a fare il maestrino che non ho scritto giusta la proprietà e poi manca il mignolo del piede sullo spigolo del comodino e poi ho fatto l'amplein (volutamente scritto male, mi piace cosi come si pronuncia!!)
 
lascia stare non è una dote spiegare agli altri oppure non è una mia dote imparare da te, vedila dal lato che preferisci.
 
grazie.


e in ogni caso, grazie.


chiedo ad altri 
 
se conosco la proprietà ItemsSelected e scorro gli elementi selezionati
dove li piazzo temporaneamente per poi riunirli a quelli nuovi selezionati per avere poi tutti gli elementi selezionati dall'inizio?
 
grazie.

Caro il mio PAOLO ROSSI... come diceva il megadirettore a Fantozzi... o forse non era Paolo Rossi.
 
Penso tu renda molto bene l'idea senza io aggiunga nulla.
 
Pappa pronta... effettivamente è comoda.
 
@Alex


mi chi ti ha chiesto nulla personalmente? ca..i tuoi mai?

No anzi... ad ogni "lisnone" c'è il suo angelo custode che non si fa i suoi... caro il mio "Paolo Rossi".
Tu giochi a bigliardo sono certo...
 
;-)
 
Ciao Paolo Rossi... 
 
@Alex


lisnone? parli difficile? ogni occasione è buona per sottolineare dall'alto dell'olimpo la tua superiorità nei confronti dei comuni mortali che frequentano questo forum?

Guarda che non sono io ma tu che dai continuamente dimostrazione di mancanza di voglia di darti da fare... la guida riportava purenin esempio elementare su cui basta vole fare un po di prove per capire... ma i "lisnoni" non hanno voglia e di offendono se li si orienta allo studio... ovvio è fatica...
 
@Alex

 @Alex
 
ho provato a fare come hai indicato ma qualcosa non torna
 
prima di applicare il filtro salvo gli elementi poi recupero gli elementi selezionati
 
*** code ****
dim selezionati(2000) as variant 
 
'salvo
Private Sub SalvaSelezionati()
 
    If Me.Categorie.ListCount > 0 Then
        Dim i
        For i = Me.Categorie.ListCount - 1 To 0 Step -1
            If Me.Categorie.Selected(i) Then
                selezionati(i) = Me.Categorie.ItemData(i)
            End If
        Next i
    End If
End Sub
 
'recupero
    If Me.Categorie.ListCount > 0 Then
        Dim i
        For i = Me.Categorie.ListCount - 1 To 0 Step -1
            If selezionati(i) = Me.Categorie.ItemData(i) Then
                Me.Categorie.Selected(i) = True
            End If
        Next i
    End If

Allora, intanto come ti ho indicato la ListBox mette a disposizione la Collection
ItemsSelected che già contiene SOLO i selezionati, quindi non ti serve discriminare se lo sono, quindi il codice che hai scritto è meglio scriverlo come sotto...!
 
Seconda cosa che non spieghi, ma sarebbe meglio, è il motivo per cui devi ripristinare la selezione... 
 
Ad ogni modo, ti ho scritto 4 righe di codice che, dopo la selezione della listBox se premi salva SALVA gli Items Selezionati, e compone la Stringa per il Filtro con IN(Valore1,Valore2...) 
Azzera i selezionati e se premi Ripristina li riseleziona.
 
Option Compare Database
Option Explicit
 
Private sSelected   As String
 
Private Sub cmdSalva_Click()
 
    Dim varItm     As Variant
 
    For Each varItm In Me.Elenco0.ItemsSelected
        sSelected = sSelected & Me.Elenco0.ItemData(varItm) & ","
    Next varItm
    If Len(sSelected) > 0 Then
        ' Tolgo l'ultimo separatore per avere la stringa corretta per il filtro   
        sSelected = Mid$(sSelected, 1, Len(sSelected) - 1)
        MsgBox "NOT IN (" & sSelected & ")"
    End If
    ' Questa serve solo per RIPULIRE la selezione in modo veloce
    Me.Elenco0.RowSource = Me.Elenco0.RowSource
End Sub
 
Private Sub cmdRipristina_Click()
    Dim i           As Integer
    Dim sT          As String
 
    ' Aggiungo il separatore per non trovare i Numeri compositi...
    ' ES se hai un ID=1 ed un ID=10 rischieresti di selezionarli entrambi
    ' inserendo il Separatore invece no.
    sT = sSelected & ","
    For i = 0 To Me.Elenco0.ListCount - 1
        If InStr(sT, Me.Elenco0.ItemData(i) & ",") > 0 Then
            Me.Elenco0.Selected(i) = True
        End If
    Next
End Sub
 
Saluti
 
@Alex


Il motivo è che in alto ho messo 3 pulsanti che se cliccati cambiano l'ordinamento degli elementi visualizzati nella casella di riepilogo per comodità di ricerca degli elementi, inoltre ho aggiunto a fianco dei 3 pulsanti una textbox che inserendo una stringa applica un filtro agli elementi della casella di riepilogo e un pulsantino alla destra della textbox che se cliccato rimuove il filtro rivisualizzandoli nuovamente tutti e ordinati in base al pulsante dei 3 che era stato cliccato.
 
oggi provo le tue indicazioni grazie.

Il giorno martedì 12 maggio 2020 10:56:36 UTC+2, @Alex ha scritto:

mi chiedevo una cosa, se le categorie sono 1500 questo codice diventa impegnativo dovendo scorrere ogni volta tutte le categorie dell'elenco per riselezionare le selezionate precedentemente?

Sono tanti 1500 anche solo per lo scorrimento...
Non puoi gestirli con qualche raggruppamento in gerarchia...?
 
@Alex


no sono tutte categorie distinte, forse allora potre usare una sottomaschera con il controllo opzione Si/No che se cliccato poi lo considero selezionato in questo modo non devo ogni volta salvare e poi recuperare i selezionati come devo invece fare con il controllo elenco casella di riepilogo?

Non ho capito... ma io intendevo una cosa simile:
 
Categoria1
  SottoCat1
  Sottocat2
  SpttoCat3
  ...
Categoria2
  SottoCat1
  Sottocartelle
  ...
Ecc...
 
In questo modo si può restringere la selezione con una selezione Principale e poi una secondaria...riducendo molto le combinazioni.
 
Per il resto non ho proprio capito come hai strutturato la cosa quindi non so cosa dire.
 
@Alex


mi spiego meglio attualmente avevo optato per caselle di riepilogo ma dovendo applicare filtro o cambiare ordinamento degli elementi e essendo molti gli elementi della casella di riepilogo (circa 1500)
 
per evitare di (punta A)
salvare gli elementi selezionati
applicare il filtro o riordinare gli elementi con criterio diverso
poi recuperare i selezionati
 
potrei:
usare una sottomaschera che funziona in modo simile alla casella di riepilogo con 2 campi
 
a sinistra capo "sel" di tipo si/no con opzione caselle di controllo
a destra la categoria
cosi chi vuole selezionare la categoria clicca la casella di controllo imposto a -1 quel campo e quindi evito quanto indicato sopra al punto A


ho fatto cosi alla fine, molto più rapido e evito di dover salvare e poi recuperare gli elementi selezionati ogni volta che applico un filtro o cambio ordinamento
 
in pratica ho aggiunto un campo "selezionato" di tipo "si/no" ed ho sostituito la casella di riepilogo con una sottomaschera con a sinistra l'opzione "selezionato" e a destra la descrizione categoria
 
poi uscendo dalla form principale eseguo query di aggiornamento che pone a false il campo "selezionato" di tutti i prodotti il suo campo "selezionato" è true