Newsgroup: it.comp.lang.visual-basic
Titolo: valore colonna datagrid

Ho una colonna datagrid con dei prezzi ... vorrei sommare tutta la colonna e 
mettere il risultao in un textBox
Ci sono riuscita facendo cosě....
code:------------------------------------------------------------------------------Dim 
tot
tot = "0"
Rs.MoveFirst
Do Until Rs.EOF
tot = tot + Val(DataGrid1.Columns(2))
cred.Text = tot
Rs.MoveNext
Loop------------------------------------------------------------------------------
Mi restituisce la somma un numero intero
es. 12,48 + 20 = 32
In sostituzione di Val cosa dovrei usare?????
Grazie a tutti 

Prova con Cdbl
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

> Prova con Cdbl
tot = tot + CDbl(DataGrid1.Columns(2))
mi da il seguente errore: "tipo non corrisponente" 

ma di che tipo è il campo sul DB ?


 In sostituzione di Val cosa dovrei usare?????
Dipende da cosa tu hai messo nella colonna dei valori.
Se ci hai messo un campo numerico, e hai lasciato che venisse formattato in 
automatico dal datagrid, il datagrid ha eseguito un CStr, che è una funziona 
localizzata, quindi devi utilizzare una funzione localizzata anche in 
interpretazione. Trattandosi di importi, la funzione più corretta è CCur.
Se invece hai inserito nella colonna una stringa che rappresenta un valore, 
devi sapere come tale stringa è generata. Se è generata in maniera 
localizzata, cioè ad esempio con un Format$ o un CStr, devi anche stavolta 
utilizzare un CCur. Se invece la stringa è generata in maniera 
delocalizzata, ad esempio con Str, devi usare una funzione delocalizzata, ad 
esempio Val.
L'importante è non mescolare mai funzioni localizzate con funzioni 
delocalizzate.
Ciao
Alberto
-- 
E tutto mi sembrava andasse bene... 

 ha scritto nel messaggio 
news:ea773ab5be5ff9cdba0...@mygate.mailgate.org...


Io volevo sapere il tipo del campo non il tipo del DB...
cioč il tipo del campo č un Numerico, un Decimale ,una Valuta , ecc.. ?


 Access
Hai un mazzo di carte del trivial pursuit, peschi a caso e posti quello che 
ci trovi scritto, o veramente fornisci queste risposte convinto di 
prenderci?



Loop------------------------------------------------------------------------------
a parte i rilievi mossi dagli altri, non capisco perchč ciclare sul
recordset e sommare il contenuto del datagrid...
altre due cosette:
1) se il campo contiene null, cosa succede?
2) se il recordset č vuoto, cosa succede?
-- 
Salutoni
Sergio
Per rispondere... togli il group dall'indirizzo
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 cioè il tipo del campo è un Numerico, un Decimale ,una Valuta , ecc.. ?


 2) se il recordset è vuoto, cosa succede?
Se entriamo in questo livello di osservazioni:
3) Perchè Tot è variant?
4) Perchè lo metti a zero passandogli una stringa?
5) Perchè passi il valore nel textbox senza una funzione di conversione 
decente?
6) Perchè metti il valore nel textbox ad ogni ciclo senza un refresh, che 
tanto non si vedrà mai, anzichè una volta sola alla fine?
Ciao


 2) se il recordset è vuoto, cosa succede?
ho controllato prima se il recordset è vuoto ... se è vuoto non entra nel 
ciclo
Ho fatto il ciclo perchè altrimenti mi riporta solo il primo numero e non la 
somma di tutti i valori della colonna 

Essendo di tipo testo prova a vedere la risposta che ti ha dato Albe V°.


 ha scritto nel messaggio 
news:3ai5j7F...@individual.net...


 Dico bene?????
A parte quotare come un cane, non riesci a capire che senza determinati 
dettagli NON SIAMO in grado di aiutarti.
Nonostante tu non abbia comunque risposto alle domande poste, la risposta è 
quasi certamente inclusa nel mio post delle 10:38 (ma l'hai letto?????), 
nonchè nella domanda 3 e 4 a cui tu non hai risposto.


Ci sono riuscita facendo così....
Io ti do un suggerimento differente. Usa SQL che è sempre dalla tua
parte. Dai un occhio alla direttiva SUM (dovrebbe venir fuori una cosa
del tipo SELECT SUM(<campo da sommare>) AS Totale FROM Tabella WHERE
<condizione di selezione>; questa direttiva, la cui esecuzione è
velocissima, ti restituisce una tabella con un'unica riga contenente
un unico campo (Totale, appunto), il cui contenuto è proprio il campo
che ti serve. Per svariati motivi, lo scorrere l'elenco è parecchio
meno efficiente. Oltre tutto, a memoria, in Access non hai nemmeno
bisogno di fare conversione di tipo (nel senso che il SUM funziona
anche se il campo è di tipo testo, a patto che il contenuto
rappresenti un numero correttamente formattato), ma anche fosse anche
questa è cosa che si risolve in breve tempo (sotto SQLServer si usa
CAST, ma mi par di ricordare un'analoga funzione anche nel SQL di
Access).
Considerazione finale. Se devi trattare dati, approfittane per
impratichirti con SQL. Ti costerà più fatica all'inizio, ma alla fine
le prestazioni che otterrai ti daranno grande soddisfazione.
--
Ciao!
Luca Menegotto

 altrimenti evitate di rispondere con altre domande  ....
posta, non ti arrabbiare.
porti delle domande ha un duplice scopo: recuperare dettagli necessari a
capire come sta effettivamente la situazione e attirare la tua attenzione
su particolari che potresti non avere notato.
del resto, nel secondo caso, spiegarti tutta la spataffiata teorica che
sta alla base del rilievo potrebbe richiedere un tempo notevole, magari
per spiegarti cose che già sai ma che hai volutamente ignorato per altre
tue considerazioni che al momento ignoriamo.
quindi si procede così: si lancia il sassetto, se queato colpisce nel
segno si può tranquillamente approfondire l'argomento.


 ha scritto nel messaggio 
news:1UQ0e.10013$IN.2...@twister2.libero.it...


 Val(Replace(Replace(DataGrid1.Columns(2),".",vbNullString),",","."))
Poi incrocia le dita, spera di non avere un sistema in francese o in 
inglese, non lamentarti se c'č qualche decimale inatteso, chiudi gli occhi, 
e leggi il risultato.
Mah...


 Alberto
Hai assolutamente ragione sul fatto che la storia della conversione da 
stringa a numero è infinita (come anche da stringa a data): in contesto 
internazionale il VB non ti dà modo di indicare secondo quale standard è 
formattata la stringa da convertire.
La soluzione che ho dato è assolutamente infallibile (salvo numeri fuori 
"range") fintanto che le stringhe sono numeri formattati in standard 
italiano, cioè usando il punto come separatore delle migliaia e la virgole 
come separatore decimale. Infatti prima tolgo i punti, poi sostituisco le 
virgole con punti. Suggerisci un modo migliore se sei capace!
Ciao
Elef
 

 Suggerisci un modo migliore se sei capace!
prova un po' a fare un giretto su google gruppi, e scoprirai che il metodo
è già stato suggerito.
da albe, naturalmente


 migliore se sei capace!
Innanzitutto occorre sapere come sono generate le stringhe che vengono messe 
nel datagrid.
L'ho chiesto, ma so già che l'OP non si degnerà mai di rispondere.
Supponendo di non avere alcuna informazione, e che le stringhe possano 
essere create in modo 'vario', è evidente che nessun metodo è deterministico 
(cioè, se io trovo "1,200" e "1.200", queste due stringhe potrebbero 
rappresentare lo stesso numero, o anche numeri completamente diversi ma 
essere state scritte da chissà chi).
Volendo comunque dare una valutazione numerica, esistono due strade: 
prendere per buono solo il punto e accettare di perdere chissà cosa in 
termini di decimali (e allora si fa un Val e chiuso lì), oppure si cerca di 
interpretare considerando il separatore più a destra come quello dei 
decimali, e sopprimendo tutti gli altri (che è quello che faccio solitamente 
io, ma non esistono solo il punto e la virgola come separatori, per cui ho 
scritto una funzioncina apposita).
Ma la cosa più discutibile che ho letto nel tuo post è che hai usato un 
Double per dei prezzi. Era su quello che verteva il mio commento.
Ciao
