Newsgroup: it.comp.lang.visual-basic
Titolo: Listview

Ciao a Tutti!!!
Ho un problema, come si fa a leggere una query tramite listview? qualcuno mi
puň aiutare?
Grazie a Tutti!!!
--------------------------------
Inviato via 
http://usenet.libero.it

 può aiutare?
emh...interpreto: ho una serie di record, contenuti in un recordset,
generati da una query, e vorrei visualizzarli in una listview...
Soluzione: dato che (se non ricordo male) la listview non lavora in modo
bound, devi aggiungere i record uno a uno con il metodo add del controllo
medesimo
Salutoni
Sergio

 medesimo
Hai ragione, ma non riesco a leggere la query.
Grazie cmq!


 Grazie cmq!
allora direi che il problema è a monte....
Se sarai meno avara di dettagli cercheremi di darti una mano....
(ricordo male o bisogna sempre estorcerti le informazioni a viva forza?
:-) )
Salutoni
Sergio


Hai ragione anche stavolta! :P :)
Dunque ho una query che legge alcuni campi da una tabella.
I record che ottengo, li vorrei visualizzare in una listview, ma non so come
fare.
Questo è il mio problema, spero di essermi spiegata.


 
Presumendo che tu abbia un oggetto di tipo Recordset, basta un ciclo del 
tipo 
do until rs.eof()
  <aggiunta recordset corrente alla listview>
  rs.movenext
loop
-- 
Bye by SixaM 8-]
---------------------
Sito comune  : 
www.it-lang-vb.net
Aiuto on line: premi F1

Ho fatto il ciclo e i dati ora li riesco a caricare, ma devo sistemare le
colonne, grazie!!!!


 colonne, grazie!!!!
azz.... ma tu non ti sbottoni mai?
non riesco mai a capire a quale livello sei arrivata.
beh, suppongo che se sei qui tu abbia già esplorato la item collection e la
subitem collection (visualizzabile solo quando il controllo è in modalità
report), quindi copio e incollo dal solito libro (che se mi pescano sono in
palese violazione di tutte le norme del copyright) la presente routine per
sistemare la larghezza delle colonne.
Non l'ho provata, in realtà non l'ho neanche letta, ma dell'autore mi fido
alquanto....
Sub ListViewAdjustColumnWidth(LV As ListView, _
    Optional AccountForHeaders As Boolean)
    Dim row As Long, col As Long
    Dim width As Single, maxWidth As Single
    Dim saveFont As StdFont, saveScaleMode As Integer, cellText As String
    ' Exit if there aren't any items.
    If LV.ListItems.Count = 0 Then Exit Sub
    ' Save the font used by the parent form, and enforce ListView's
    ' font. (We need this in order to use the form's TextWidth
    ' method.)
    Set saveFont = LV.Parent.Font
    Set LV.Parent.Font = LV.Font
    ' Enforce ScaleMode = vbTwips for the parent.
    saveScaleMode = LV.Parent.ScaleMode
    LV.Parent.ScaleMode = vbTwips
    For col = 1 To LV.ColumnHeaders.Count
        maxWidth = 0
        If AccountForHeaders Then
            maxWidth = LV.Parent.TextWidth(LV.ColumnHeaders(col).Text)+200
        End If
        For row = 1 To LV.ListItems.Count
            ' Retrieve the text string from ListItems or ListSubItems.
            If col = 1 Then
                cellText = LV.ListItems(row).Text
            Else
                cellText = LV.ListItems(row).ListSubItems(col - 1).Text
            End If
            ' Calculate its width, and account for margins.
            ' Note: doesn't account for multiple-line text fields.
            width = LV.Parent.TextWidth(cellText) + 200
            ' Update maxWidth if we've found a larger string.
            If width > maxWidth Then maxWidth = width
        Next
        ' Change the column's width.
        LV.ColumnHeaders(col).width = maxWidth
    Next
    ' Restore parent form's properties.
    Set LV.Parent.Font = saveFont
    LV.Parent.ScaleMode = saveScaleMode
End Sub
Salutoni
Sergio

 Sub ListViewAdjustColumnWidth(LV As ListView, _
[cut 2]
Si puo' fare anche con le API... 
www.vb2themax.com


 Si puo' fare anche con le API... 
www.vb2themax.com
e se la memoria non mi inganna, l'autore è lo stesso....;-)
Salutoni
Sergio

CSSoft ti ringrazio per avermi detto la procedura, sei stato molto
gentile!!!
Ringrazio anche Simax per l'idea delle API ma non le ho mai usate.
Cmq sto ancora cercando di sistemare i dati nella lista.
Ho un solo campo, ma i dati vengono visualizzati graficamente in modo non
corretto.
Ora cerco di sistemarli tramite la procedura di CSSoft, poi vi faccio
sapere!


 ma i dati vengono visualizzati graficamente in modo non corretto.
mi perdo completamente: come può essere visualizzata scorrettamente una sola
colonna?
Allora mi dico: dicendo "un solo campo" intenderà forse che ha una sola riga
da visualizzare (almeno nella fase di test), ma a questo punto cosa avrà
voluto dire con "ma i dati vengono visualizzati graficamente in modo non
corretto". Per te che sei davanti al (tuo) monitor forse è ovvio. Per me, ad
una distanza che non conosco, ma sicuramente superiore a quanto i miei miopi
occhi possono considerare accettabile, la cosa è un po' meno evidente.
Ripeto: forse sono io che non capisco troppo bene, ma tu potresti darmi una
mano?
Salutoni

Forse mi spiego male io:(
Cmq la situazione è questa:
ho una datacombo in cui carico il codice del catalogo.
Quando seleziono un catalogo la listview deve caricare l'elenco delle copie
di quel catalogo se è disponibile. E' qui che creo la query, dove leggo il
catalogo, secondo le condizioni di disponibilità e del codice che gli passo
dalla selezione della voce nella datacombo.
I dati (in qsto caso i cataloghi) caricati, sono esatti, ma vengono
visualizzati in 3 colonne e mi chiedo perchè?
Io non li voglio vedere in 3 colonne, e poi il catalogo che è il risultato
di un campo calcolato es. CAT43/1 -Magazine,
viene visualizzato così: CAT43/1 -Ma... non capisco perchè!!!
Volevo quindi creare una procedura che creasse una colonna, per avere un
elenco dei cataloghi.
Spero di essermi spiegata.


Forse mi spiego male io:(
Cmq la situazione è questa:
ho una datacombo in cui carico il codice del catalogo.
Quando seleziono un catalogo la listview deve caricare l'elenco delle copie
di quel catalogo se è disponibile. E' qui che creo la query, dove leggo il
catalogo, secondo le condizioni di disponibilità e del codice che gli passo
dalla selezione della voce nella datacombo.
I dati (in qsto caso i cataloghi) caricati, sono esatti, ma vengono
visualizzati in 3 colonne e mi chiedo perchè?
Io non li voglio vedere in 3 colonne, e poi il catalogo che è il risultato
di un campo calcolato es. CAT43/1 -Magazine,
viene visualizzato così: CAT43/1 -Ma... non capisco perchè!!!
Volevo quindi creare una procedura che generasse una colonna, per avere un
elenco dei cataloghi.
Spero di essermi spiegata.
--------------------------------
Inviato via 
http://usenet.libero.it

 Spero di essermi spiegata.
Non quanto la mia povera cervice avrebbe desiderato, ma devo ammettere che
c'č giŕ un grosso miglioramento.
Adesso vediamo se posso spiegarmi io
allora, se dovessi fare io una cosa del genere farei....
imposterei la proprietŕ view del controllo listview a 3-report(in design
time)
caricherei il recordset contenente l'elenco che mi interessa, senza fare
campi calcolati ma raccogliendo solo i campi che mi interessano
metterei i titoli alle colonne del controllo lv in questo modo:
dim fld as field
for each fld in mioRecordset
 lv.columnheaders.add ,, 
fld.name
next
poi caricherei tutti i dati con un ciclo del genere
dim fld as field
dim li as listitem
do until miorecordset.eof
 li = lv.listitems.add
 for each fld in miorecordset
  li.listsubitems.add,,fld.value
 next
 miorecordset.movenext
loop
poi, se ne ho voglia, con la routine giŕ postata sistemerei la larghezza
delle colonne
Spero, a mia volta, di essermi spiegato
Salutoni
Sergio
P.S. i pezzettini di codice sono stati scritti direttamente nell'editor di
testo, potrebbero contenere una quantitŕ enorme di svarioni

Ciao CSSoft!!!
Dopo tutto ieri pomeriggio e tutta qsta mattina sono riuscita ad ottenere il
giusto caricamento dei cataloghi, apportando anche una piccola modifica,
ovvero l'uso di due colonne, per visualizzare il codice del catalogo delle
copie disponibili e il titolo del catalogo.
Dunque ho fatto cosě (come poi hai scritto tu):
Dim clmX As ColumnHeader
Dim itmX As ListItem
nel form_load
Set clmX = lsElencoCataloghi.ColumnHeaders.Add(, , "Copie Disponibili",
lsElencoCataloghi.Width / 2)
Set clmX = lsElencoCataloghi.ColumnHeaders.Add(, , "Testata",
lsElencoCataloghi.Width / 2)
lsElencoCataloghi.View = lvwReport
 
ho creato poi una procedura CaricaLista dove;
creo la query,
apro il recordset passandogli la qry,
e poi carico i dati cosě:
lsElencoCataloghi.ListItems.Clear
mioRS.MoveFirst
Do Until mioRS.EOF
       Set itmX = lsElencoCataloghi.ListItems.Add(,, mioRS("codicecopia")) ' creo
in item
       itmX.SubItems(1) = CStr(mioRS![Testata])
       mioRS.MoveNext
Loop
     lsElencoCataloghi.SortKey = 0
     lsElencoCataloghi.SortOrder = 0
 
Dopo questo scervellamento, esattamente 5 minuti fa, mi č stato detto di
sostituire la listview con una datagrid!!!! Urkaaaaaaaa!!!
Cmq grazie mille per l'aiuto e la pazienza!!!!
Ciao...Ciao!!!


 sostituire la listview con una datagrid!!!! Urkaaaaaaaa!!!
Attendiamo con ansia un post con subject: "datagrid: problemi di
caricamento" ;-))))
Comunque è sempre un piacere avere a che fare con te, se non altro perchè
torni sempre per farci sapere se i consigli ti sono serviti, e non lesini
sui complimenti, con gran gioia della nostra autostima
Salutoni
Sergio