Newsgroup: it.comp.appl.access
Titolo: ordinare listbox

è possibile ordinare con un comando vb ordinare gli elementi di una casella
di riepilogo?
vorrei applicarlo a dei pulsanti da mettere come intestazione delle colonne,
tipo quelli di excel.
grazie

 grazie
-- 
Ciao
Pablitomf (Maurizio Facciuti)
------------------------------
http://www.sitocomune.com/
http://www.accessgroup.it/
------------------------------
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Cholo ha scritto:

Si, si può fare. Vedi sul 
www.sitocomune.com
, sez. forms, il mio esempio
"Cambiare l'ordinamento di una casella di riepilogo a selezione multipla
senza perdere le selezioni già effettuate".
I pulsanti (o etichette) li devi mettere fuori dalla casella, come
nell'esempio, e lanciare l'ordinamento sull'evento click di ciascuno.
Namor
-- 
namor at inwind punto it


"Cholo" <m.mag...@NOSPAMlibero.it> ha scritto nel messaggio
news:kKUvd.23993$Lg7.7...@twister1.libero.it...

La cosa è fattibile, ma richiede un pò di codice.
Supponi di avere l'Origine dati così:
"SELECT * FROM NomeTabella"
Quello che dovresti implementare è esattamente l'uso della Proposizione
ORDER BY
in modo dinamico, sapendo che in un Predicato SQL è sempre l'ultima sezione.
Io ti consiglierei di salvare in una QUERY la STRUTTURA SQL con già
un'ordinamento di DEFAULT.
Ora supponi la query si chiami Q_Ordina
All'interno della tua Form metti un Gruppo Opzioni in visualizzazione
Pulsanti che ti aiuti
nella schelta del Criterio di ordinamento, attenzione all'Ordine progressivo
dei Controlli
nell'OptionButton in quanto la funzione Choose nella routine sotto è legata
proprio
a quello.
Gestisci l'evento Dopo Aggiornamento dell'Option Buttom
Private Sub NomeOptionButton_AfterUpdate()
    dim strOrder    as string
    dim strSQL      as string
    dim intPos       as Integer
    'Rileva l'indice del Button premuto e lo converte nell'equivalente
campo.
    strOrder =
Choose(Me!NomeOtionButton,"Campo1","Campo2","Campo3","Campo4")
    'Ora hai esrtatto nella stringa il nome del Campo che deve essere il
criterio di Ordinamento
    strSQL=CurrentDb.Querydefs("Q_Ordina").SQL
    intPos=Instr(strSQL,"ORDER BY"+8)
    strSQL=Mid(strSQL,1,intpos) & "ORDER BY " & strOrder
    CurrentDb.Querydefs("Q_Ordina").SQL=strSQL
    me.NomeListBox.Requery
End sub
Ci sono altri metodi, come ad esempio per le versioni da XP in poi
di uare un Recordset ed ordinare direttamente il Recordset tramite
la proprietà SORT/SORTBY, usando Recordset ADO ed associandoli
alla List.....!
In fondo si tratta di usare un pò di fantasia grafica applicata al codice.
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------

grazie per tutti i contributi... sto lavorando per fare funzionare la
listbox come voglio, con i vostri suggerimenti.
già chi ci sono vi chiedo:
come faccio ad aprire (in un'altra finestra) la maschea di gestione del
record quando clicco (o doppio clicco...) su un elemento della listbox?
avevo provato con
DoCmd.OpenForm "Nome_Form_Dettaglio", , , "[ID]=" & Me![ID]
ma mi apriva sempre la maschera vuota, come se dovessi inserire un nuovo
record... dov'è l'errore???
grazie

"Cholo" <m.mag...@NOSPAMlibero.it> ha scritto nel messaggio
news:ntXvd.27909$Zk.4...@twister2.libero.it...

Apparentemente è corretta, non è che la Form è in modalità
InserimentoDati...?


 InserimentoDati...?
esatto... ne ho da imparare!!!
però quando devo inserire (tipo con un pulsante "inserisci") come faccio a
impostare il parametro "Inserimento Dati" da codice? uso sempre la stessa
sintassi senza passare alcune condizione Where?

"Cholo" <m.mag...@NOSPAMlibero.it> ha scritto nel messaggio
news:iEXvd.27926$Zk.4...@twister2.libero.it...

Io passo un Argomento tramite la proprietà OpeArgs e su Evento Load
controlli il valore dopo di che via Codice setti la proprietà:
Me.DataEntry=True
Esempio:
   DoCmd.OpenForm "NomeForm", , , , , , "DataEntry;True"
Su Load:
Private Sub Form_Load()
    dim varP as variant
    if Len(me.OpenArgs)>0 then
        varp=Split(Me.OpenArgs,";")
        Me.Properties(cstr(varp(0)).value=cint(varp(1))
    End if
End sub
In questo modo passo Proprietà da impostare e valore.
Questo metodo lo si usa solo per casi un pò particolari come questo
non è da preferirsi all'Uso esplicito delle Proprietà dall'esterno, ma
può risultare molto utile.
Ciao


ok... ma tornato alla mia listbox, a che elemento devo associare l'openform
per fare in modo che nella maschera venga visualizzato il record su cui
faccio doppio clic?
ancora grazie

"Cholo" <m.mag...@NOSPAMlibero.it> ha scritto nel messaggio
news:6eYvd.28016$Zk.4...@twister2.libero.it...

Non capisco cosa dici...!
Il Doppio Click è un evento della ListBox, se è lei che deve
generare l'apertura sarà lei ad avere l'EVENTO su cui inserire
il Codice.....!
Cosa mi sfugge......?


 il Codice.....!
io ho associato all'evento DoppioClick della ListBox il seguente codice:
DoCmd.OpenForm "NomeForm", , , "[Cod]=" & Me![Cod]
dove [Cod] è la chiave univoca del record (presente anche come campo della
ListBox ma nascosto).
quando faccio doppio click su un elemento della listbox il debug mi dice che
"è impossibile trovare il campo 'Cod' a cui si fa riferimento
nell'espressione".
sicuramente commetto un errore da pirla...

"Cholo" <m.mag...@NOSPAMlibero.it> ha scritto nel messaggio
news:tsYvd.28047$Zk.4...@twister2.libero.it...


Così come l'hai scritta non va ovviamente bene ,scomponiamo la stringa:
"[Cod]=" & Me![Cod]
"[Cod]="     'Questo è il riferimento al campo della Tabella/Query
Me![Cod]    'Questo dovrebbe essere un Controllo chiamato COD nella Form
                 'e a meno chè la tua LisBox non si chiami COD e la colonna
associata
                 'sia la prima non và.
Supponiamo:
TuaListBox    (Nome del Controllo ListBox)
Colonna associata è la PRIMA, quindi indice 0
DoCmd.OpenForm "NomeForm", , , "[Cod]=" & Me!TuaListBox
Se fosse la colonna 2(nascosta) ad essere collagata a COD:
DoCmd.OpenForm "NomeForm", , , "[Cod]=" & Me!TuaListBox.Column(1)
P.S. la numerazione colonne parte da ZERO.
Ciao


> DoCmd.OpenForm "NomeForm", , , "[Cod]=" & Me!TuaListBox
giusto!
grazie ancora...