Newsgroup: it.comp.lang.visual-basic
Titolo: Popolare una listwiew

...il problema è il seguente: richiamo le intestazioni ed i relativi dati da
una tab di access e vorrei che la popolasse così
Intesta1    Intesta2    Intesta3    Intesta4
dato1A    dato2A    dato3A    dato4A
dato1B    dato2B         *         dato4B
dato1C         *        dato3C    dato4C
(dove c'è "*" vuol dire che manca il dato (null) )
invece fà così:
Intesta1    Intesta2    Intesta3    Intesta4
dato1A    dato2A    dato3A    dato4A
dato1B    dato2B     dato4B
dato1C    dato3C    dato4C
...sballandomi tutto.....
cosa posso fare? è un prob di access o di vb?
Private Sub CaricaCaratteristicheGruppi()
    Dim rCarattGruppi As ADODB.Recordset
    Dim SQL As String
    Dim li As ListItem
    Dim si As ListSubItem
    'Dim itmX As ListItem
        Dim ncaratt As String
    Dim Conta As Integer
    Dim nrcampiintabella As Integer
    Dim Titolo As String
    Dim Valore As String
'Dichiarazioni per caricare gli ordini
    Dim rOrdini As ADODB.Recordset
    Dim SQLordini As String
    SQLordini = "select * from Ordini where Gruppo= '" & ultimoselezionato &
"' Order BY Gruppo"     '13-4'
    Set rOrdini = New ADODB.Recordset
    rOrdini.Open SQLordini, Db, adOpenKeyset, adLockReadOnly
    Debug.Print SQLordini
'Fine dichiarazioni per caricare gli ordini
'--------------------------------------------------------------------------
'inizia a scrivere i "titoli" nelle ColumnHeaders
    lstGruppi.Clear
    lwCaratt.ListItems.Clear
    lwCaratt.ColumnHeaders.Clear
    SQL = "SELECT * FROM CaratteristicheGruppi where Gruppo = '" &
ultimoselezionato & "'"
    ultimoselezionato = ""
    Set rCarattGruppi = New ADODB.Recordset
    rCarattGruppi.Open SQL, Db, adOpenKeyset, adLockReadOnly
    If rCarattGruppi.RecordCount > 0 Then
        rCarattGruppi.MoveFirst
        nrcampiintabella = rCarattGruppi.Fields.Count
           Do While Not rCarattGruppi.EOF
                For Conta = 1 To (nrcampiintabella - 4)
                    If Not IsNull(rCarattGruppi.Fields("caratt" &
Conta).Value) Then
                        Titolo = rCarattGruppi.Fields("caratt" &
Conta).Value
                        lwCaratt.ColumnHeaders.Add.Text = Titolo
                            lwCaratt.ToolTipText = Titolo
'**********************
                    End If
                Next Conta
                rCarattGruppi.MoveNext
            Loop
    End If
'finito di scrivere i "titoli" nelle ColumnHeaders
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
            If rOrdini.RecordCount > 0 Then
                rOrdini.MoveFirst
                nrcampiintabella = rOrdini.Fields.Count
                   Do While Not rOrdini.EOF
      Set li = lwCaratt.ListItems.Add(Text:=rOrdini.Fields("caratt" &
1).Value)
                        For Conta = 2 To (nrcampiintabella - 4)
                            If Not IsNull(rOrdini.Fields("caratt" &
Conta).Value) Then
                                Valore = rOrdini.Fields("caratt" &
Conta).Value
                                Set si = li.ListSubItems.Add(Text:=Valore)
                                si.ForeColor = vbRed
                            End If
                        Next Conta
                        rOrdini.MoveNext
                    Loop
            End If
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
End Sub
--
--------------------------------------------
"Che la vostra memoria non s'imboli
  nel primo mondo da l'umane menti,
  ma s'ella viva sotto molti soli "
--------------------------------------------
molte onorevoli grazie a Voi
^____^
Luca

   ma s'ella viva sotto molti soli "
anche se sono levanti e cocenti ?
ciao, j.


capperi non lo sň!!!!  cavoli, mi sembra che avolte lo aggiunge e a volte lo
salta!!!
ma non capisco xchč...
...dimmi qual'č la soluzione che provo a capirlo a ritroso...
...sob...

 ha scritto nel messaggio
news:aetb4j$a52c8$1...@ID-125273.news.dfncis.de...


 ...dite la verità... state cercando di confondermi o di aiutarmi ...???
;-?
st cercando di farti ragionare.
il lv in modo report e' una tabella, e tu gli fai aggiungere la cella
(subitem) solo se not isnull.
prova ad aggiungerlo in ogni modo, e se isnull mettici 0, o "", come credi.
il seguito a oggi, sono in movimento.
ciao, j.

                   Do While Not rOrdini.EOF
      Set li = lwCaratt.ListItems.Add(Text:=rOrdini.Fields("caratt" &
1).Value)
                        For Conta = 2 To (nrcampiintabella - 4)
                            If Not IsNull(rOrdini.Fields("caratt" &
Conta).Value) Then
                                Valore = rOrdini.Fields("caratt" &
Conta).Value
                                Set si = li.ListSubItems.Add(Text:=Valore)
                                'si.ForeColor = vbRed ' prova colore
                            Else
                                Set si = li.ListSubItems.Add(Text:="x")
                            End If
                        Next Conta
                        rOrdini.MoveNext
                    Loop
...avevo provato anche così, ma è peggio, mi carica quasi solo delle x
(anche quando il valore c'è...???....)
...ti allego lo zip di vb+access ;-)

 ...ti allego lo zip di vb+access ;-)
scusa il ritardo, javalab@ la controllo poco.
ora ho cambiato le impostazioni di oe.
non ho lanciato il tuo vbp. quando vedo degli ocx ignoti non lo faccio mai.
incasino il registro gia' abbastanza per conto mio.
ho messo un listview e un command su un form.
il listview non ha particolari regolazioni, salvo:
modalita' report
fullrow select
il codice veloce e' qui sotto. in mail ti mando una schermata del listview e
della tabella aperta in access. a parte che in access la colonna idfornitore
risulta diversa come caption e come posizione, direi che le tabelle
combaciano.
se fai qualche prova col codice vedi tu che campi includere o no, gli
abbellimenti tipo vbred, e se non scrivere "null" ma "".
la prossima volta pero', prima di mandare zip ecc., magari chiedi...
--
ciao, j.
www.sundaysw.com
Option Explicit
Private Sub Command1_Click()
    Dim itmX As ListItem, cX As ColumnHeader
    Dim j As Long
    Dim db As Database, rs As Recordset
    Set db = OpenDatabase("libro_ordini.mdb")
    Set rs = db.OpenRecordset("ordini")
    rs.Index = "primarykey"
    With LV
        For j = 0 To 33
            Set cX = LV.ColumnHeaders.Add
            cX.Width = 900
            cX.Text = rs.Fields(j).Name
        Next
        Set cX = LV.ColumnHeaders.Add
        cX.Width = 400
    End With
    With rs
        Do While Not .EOF
            Set itmX = LV.ListItems.Add()
            itmX = !idprodotto
            For j = 1 To 33
                If Not IsNull(.Fields(j).Value) Then
                    itmX.SubItems(j) = .Fields(j).Value
                Else
                    itmX.SubItems(j) = "NULL"
                End If
            Next
        .MoveNext
        DoEvents
        Loop
    End With
    rs.Close: Set rs = Nothing
    db.Close: Set db = Nothing
End Sub

1) Grazie
2) Scusa x l'invio NON autorizzato di file
3) ..ammmazza quante icone hai??? ;-)
4) se vuoi fare una prova, puoi anche eliminare l'ocx (serve solo a far
suonare "tic" ad ogni battuta tasto)
5) il codice sul NG è quello x creare il tuo form1 allegato
6) oooh cccappperi "..una mattina mi son svegliato..." ho visto il tuo sito
... forte!!!
7) 'stà sera provo rismanettare...
a presto ;-)
arigrazie

Prova ad utilizzare questa procedura che ho realizzato
E' sufficiente che gli passi il RecordSert ADO e la ListView che devi
Riempire
Ed essa in dimanico carica sia le Colonne che il contenuto.
Spero ti possa essere d'aiuto perchè non sono ben riuscito a comprendere
il tuo problema
Un Saluto Ciao
Public Sub CaricaListView(RecordSet_ADO As Recordset, Lista As ListView)
On Error Resume Next
Dim objListItem As ListItem
Dim i As Integer
    With Lista
        .Enabled = False
        .Visible = False
        'Elimino il contenuto della Lista e le Colonne in essa contenute
        .ListItems.Clear
        .ColumnHeaders.Clear
 
        'Inserisce tante colonne nella Lista quante colonne sono
presenti nel recordset
 
        For i = 1 To RecordSet_ADO.Fields.Count - 1
            .ColumnHeaders.Add , , RecordSet_ADO.Fields(i).Name
        Next i
 
        'Finchè il recordset non è finito
        While RecordSet_ADO.EOF = False
            'Verifica se è necessario inserire un icona
            'Inserisce nella Lista il contenuto del Primo record del
Recordset
            Set objListItem = .ListItems.Add(, ,
CStr(RecordSet_ADO.Fields(1)))
            'Imposta nel Tag della riga il codice del elemento del
recordset in esame
            objListItem.Tag = RecordSet_ADO.Fields(0) & "|" &
RecordSet_ADO.Fields(1)
            'Inserisce nelle colonne della Lista gli elementi successivi
al primo del recordset in esame
            For i = 1 To .ColumnHeaders.Count - 1
                objListItem.SubItems(i) =
IIf(IsNull(RecordSet_ADO.Fields(i + 1)), "", RecordSet_ADO.Fields(i +
1))
                .ColumnHeaders(i).Width = IIf((150 *
RecordSet_ADO.Fields(i).ActualSize) > .ColumnHeaders(i).Width, 150 *
RecordSet_ADO.Fields(i).ActualSize, .ColumnHeaders(i).Width)
                objListItem.Tag = objListItem.Tag &
objListItem.SubItems(i)
            Next i
            'Si sposta al record successivo
            RecordSet_ADO.MoveNext
        Wend
 
        .GridLines = True 
        .Enabled = True
        .Visible = True
    End With
 
    Exit Sub
'Errore:
'    MsgBox Err.Description, vbCritical + vbOKOnly, "Errore: " &
Err.Number & " in " & App.Title & " - " & "CaricaListView"
End Sub
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG