Newsgroup: it.comp.lang.visual-basic
Titolo: [VB.NET] - Public sub CaricaListview()

Ciao,
Ho una form con un listview piena di record...
questa listview viene popolata da una rutine sub all'interno del suo  form.
Problema:
In questa form c'è un tasto per l'inserimento/Modifica dei dati - premendo
il tasto
vado nel dettaglio del record che si trova in una form diversa.
Bene faccio tutto correttamente, il tasto salva- Form(dettaglio)
al suo interno, ha la  chiamata alla sub public che carica la listview nella
form principale
il form principale è sotto al form dettaglio in ((mode)=Esclusivo) OK
pero' quando chiudo il form dettaglio la listview del form principale rimane
esattamente
allo stato di apertura iniziale...mi spiego meglio....le modifiche
apportate, o l'aggiunta
di un nuovo record non viene affettuata, almeno apparentemente, si perchè se
chiudo
il form principale e lo riapro, allora il nuovo record aggiunto lo vedo.
Spero di essermi spiegato al meglio
Ciao
Maurizio A.
_______________________________________
{30 - Visual Studio.NET and VC++ development }
_______________________________________

no so e come se non viene effettuato qualche tipo di refresh sulla
griglia, ho controllato e nella rutine da oggetto ci entra
e carica tutto...

 e carica tutto...
Prova a postare il codice di tale routine che gli diamo una occhiata...
Ciao,
Mattia

Codice:
Public Sub CaricaListView()
Dim N As Long
Dim RsX As New ADODB.Recordset()
RsX.Open("SELECT * FROM TB_Anagrafica ORDER BY pippo", DB, , , False)
ListView1.Items.Clear()
N = 0
Do Until RsX.EOF
    ListView1.Items.Add(RsX.Fields(1).Value
    ListView1.Items(N).SubItems.Add(RsX.Fields(3).Value)
    ListView1.Items(N).SubItems.Add(RsX.Fields(5).Value)
    ListView1.Items(N).SubItems.Add(RsX.Fields(8).Value)
    ListView1.Items(N).SubItems.Add(RsX.Fields(9).Value)
    ListView1.Items(N).SubItems.Add(RsX.Fields(11).Value)
    RsX.MoveNext()
    N = N + 1
Loop
RsX.Close()
lblNumeroRecord.Text = "Numero recordset: " & N
End Sub

Io l'ho riscritta cosě:
Public Sub CaricaListView()
Dim N As Long
Dim RsX As New ADODB.Recordset
RsX.Open "SELECT * FROM TB_Anagrafica ORDER BY pippo", DB, , , False
ListView1.Items.Clear
N = 1
Do Until RsX.EOF
    ListView1.ListItems.Add N, , RsX.Fields(1).Value
    ListView1.ListItems(N).ListSubItems.Add 1, , RsX.Fields(3).Value
    ListView1.ListItems(N).ListSubItems.Add 2, , RsX.Fields(5).Value
    ListView1.ListItems(N).ListSubItems.Add 3, , RsX.Fields(8).Value
    ListView1.ListItems(N).ListSubItems.Add 4, , RsX.Fields(9).Value
    ListView1.ListItems(N).ListSubItems.Add 5, , RsX.Fields(11).Value
    RsX.MoveNext
    N = N + 1
Loop
RsX.Close
lblNumeroRecord.Text = "Numero recordset: " & N
End Sub
provala e fammi sapere


il (ListView1.ListItems) non gli piace me lo da sottolineato

ah...e meglio che lo sappiate, utilizzo la beta 2 di .NET

 il (ListView1.ListItems) non gli piace me lo da sottolineato
Perchè usi i Microsoft Windows Common Controls  5.
Fai una prova, metti nei componenti i Microsoft Windows Common Controls  6 e
sostituisci la ListView attuale con quella della versione 6 e prova. Fammi
sapere.
Ciao,
Mattia

partendo dal presupposto che il tuo codice va bene, molto probabilmente è
solo una questione di temporizzazione.
questo dovrebbe verificarsi specialmente quando modifichi un record,
piuttosto che quando lo aggiungi.....
segui il discorso: dovrebbe essere un problema della connection. Prova ad
aprirla e chiuderla solo quando serve.
Apri la connection, scrivi le modifiche sul recordset, chiudi la connection
quando ricarici con la sub che hai postato, stesso discorso. apri conn,
riempi la listview, chiudi conn.
good coding!!!
-- 
Damiani Liborio Igor
ig...@igordamiani.it
 - 
soft...@igordamiani.it
 - 
idam...@hotmail.com
http://www.igordamiani.it
ICQ : 11847262

 ah...e meglio che lo sappiate, utilizzo la beta 2 di .NET
Cavoli hai ragione (l'hai pure scritto nell'oggetto)!!!
Scusa ma non ci ho fatto caso, quello è il codice che uso io in VB6. Pardon.
Ciao,
Mattia

ochhio, Mattia, dal subject penso che utilizzi .NET, la beta 2, per
giunta......


 sapere.
Non c'è lo nei componenti COM tuttavia attualmente uso quella
di default che mi da lui....negli strumenti.

 giunta......
Si, in ritardo, mooooooolto in ritardo ma ci sono arrivato.
Che pirla che sono, va beh... La prossima volta leggo meglio... ;-)
Bye

Esattamente uso la beta 2...lo so non è il massimo
ma ho solo questa...versione per il momento
cmq...non è da escludere che sia un puco del programma.

OK

la risposta più concisa mai apparsa su questo NG....
:-))
a parte scherzi, non pensare che sia un trucchetto. In realtà, il metodo
giusto è questo, cioè aprire le connessioni appena servono e chiuderle
appena non servono più. Risparmi memoria (questo lo dice MS), soprattutto se
parliamo di un db client/serve, come mysql, sqlserver e simili.
quindi, prova, poi magari fai sapere, ok?


 
Banalmente, tu sai in che modalita' hai aperto la seconda form
(inserimento o modifica). E sai anche la chiave del record che stai 
eventualmene modificando. Se la form di modifica/inserimento viene 
chiusa con una conferma (presumo che il salvataggio/modifica dei dati su 
DB sia fatto li'), basta che in un caso ti ricarichi il record con i 
nuovi dati, modificando i campi della ListView, e nel secondo ti fai 
ritornare il nuovo codice, lo leggi da DB ed inserisci un nuovo item.
-- 
Bye by SixaM 8-]
---------------------
Sito comune  : 
www.it-lang-vb.net
Aiuto on line: premi F1

 good coding!!!
Si scusa se rispondo cosi'...ma ho i minuti contati...
cmq...ho provato...apro chiudo e riapro quando serve..
ma non va...
pero' i fatto di aprire ogni volta la connection...non è che perde
di prestazioni...io di solito in vb6, la connessione al db la apro solo
una volta e la chiudo solo quando esco dal programma.

a dirti la verità, anche io faccio così......
però a quanto parte c'è perdita di prestazioni solo se metti la connection =
nothing.
Se invece fai una semplice Conn.Close, VB (o meglio, il motore del db)
mantiene una sorta di pooling, cioè si ricorda delle ultime x connessioni
(per default mi pare siano 5 o 10, boh....) e quando le richiami, lui in
realtà le ha già pronte.
cmq, effettivamente non saprei dirti il problema esattamente. prendi in
considerazione l'idea che ha postato SixaM, che non è male. E' inutile
ricaricare tutto il recordset se hai aggiunto o modificato un solo record:
metti a posto quello manualmente e sei a posto.....


 --
Va bene faro cosi'
Ciao

Scoperto errore:
Non potevo adottare la soluzione proposta, anche se era buona,
per il semplice fatto che avrei dovuto fare tutta una procedura
per ordinare il record inserito (Nuovo)
Quindi ho preferito perdere un po' di tempo per capire dove sbagliavo
Nel post iniziale ho sbagliato a non inserire il metodo di chiamata,
Quindi mi scuso...forse qualcuno avrebbe capito subito il mio errore,
beh mi sono accorto che era proprio questo che non digeriva,
Mi spiego:
Dim Chiama as new frmAnagrafica_lista()
dopo, nel form dettaglio all'uscita mettevo:
Call Chiama.caricalistview()
Mi ha ingannato perchè tuttavia, nella rutine lui ci entrava.
ho risolto il problema con un flag di statoOperazione
quindi la chiamata alla funzione lo fatta subito dopo
l'evento  ShowDialog()  del tasto Nuovo Record nel form Principale
gestendo cosi' attraverso il flag la chiamata corretta
call caricalistview
PS:
azz...questo .NET mi fa pensare....
arrivato ad un buon livello con VB6, mi sembra quasi
di ricominciare tutto da capo quando mi metto su .NET
un collega proprio ieri mi ha detto:
Meglio fare il "contadino", io rispondo, perchè
Lui - la zappa è sempre la zappa, vb non è sempre vb
fa riflettere questo pero'
Ciao e grazie.


Altra riflessione,
Fino ache punto riusceremo a stare dietro al veccio Bill???
[questo continuo a domandarmelo]

 [questo continuo a domandarmelo]