Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - VB.NET Erata visualizzazione Decimali in un controllo
Forum - C# / VB.NET - VB.NET Erata visualizzazione Decimali in un controllo

Avatar
xone2003 (Normal User)
Rookie


Messaggi: 32
Iscritto: 27/11/2008

Segnala al moderatore
Postato alle 10:34
Sabato, 14/02/2009
Ciao a tutti,

ho un problema che non riesco a risolvere..

Allora:

Ho un database in cui sono inserite righe che contengono cifre decimali... (controllato e ricontrollato essere presenti e corrette).

Cosa succede?
Nella form della soluzione visualizzo i dati, tramite text e maskedtext box, del database scorrendoli tramite pulsanti next, previuos ecc...; mi accorgo che in alcuni controlli il valore riportato è troncato al punto!(La formattazione delle MaskedTextBox nella form è MB_VelocitaMed 99.99, MB_VelocitaMax 999.99, MB_chilometraggio 9999.99).


es.
nella MaskedTextBox "Chilometraggio" il valore riportato è corretto es 8888,88
in quella a fianco "VelocitaMax" il valore (888,88 nel database) viene troncato e visualizzato in "888."
e nella successiva "VelocitaMedia" il valore (88.88 nel database)   viene troncato e visualizzato in "88."

il codice che genera l'errore di visualizzazione è il seguente:

Codice sorgente - presumibilmente VB.NET

  1. If TB_Filtro_ODODA.Text = "" Then TB_Filtro_ODODA.Text = "0"
  2.         If TB_Filtro_ODOA.Text = "" Then TB_Filtro_ODOA.Text = "99999"
  3.         If TB_Filtro_VMaxDa.Text = "" Then TB_Filtro_VMaxDa.Text = "0"
  4.         If TB_Filtro_VMaxA.Text = "" Then TB_Filtro_VMaxA.Text = "99999"
  5.         If TB_Filtro_AVGDa.Text = "" Then TB_Filtro_AVGDa.Text = "0"
  6.         If TB_Filtro_AVGA.Text = "" Then TB_Filtro_AVGA.Text = "99999"
  7.  
  8.  
  9.         Dim val1 As Decimal = TB_Filtro_ODODA.Text
  10.         Dim val2 As Decimal = TB_Filtro_ODOA.Text
  11.         Dim val3 As Decimal = TB_Filtro_VMaxDa.Text
  12.         Dim val4 As Decimal = TB_Filtro_VMaxA.Text
  13.         Dim val5 As Decimal = TB_Filtro_AVGDa.Text
  14.         Dim val6 As Decimal = TB_Filtro_AVGA.Text
  15.  
  16.         Dim cmd1 As String = "SELECT * FROM DatiBici WHERE Bike LIKE '%" & TB_Filtro_Bicicletta.Text & "%' AND Categoria LIKE '%" & TB_Filtro_Categoria.Text & "%' AND Partecipanti LIKE '%" & TB_Filtro_Partecipanti.Text & "%' AND Descrizione LIKE '%" & TB_Filtro_Descrizione.Text & "%' AND CondizioniMeteo LIKE '%" & TB_Filtro_Meteo.Text & "%' AND Note LIKE '%" & TB_Filtro_Note.Text & "%'AND Anno LIKE '%" & TB_Filtro_Anno.Text & "%'AND Chilometraggio BETWEEN " & val1 & " AND " & val2 & " AND VelocitaMax BETWEEN " & val3 & " AND " & val4 & " AND VelocitaMedia BETWEEN " & val5 & " AND " & val6 & ""



ho risolto in questo modo:

1- togliendo alla dichiarazione delle variabili il "as decimal"
2- impostando nei controlli filtro TB_filtro_.... i rispettivi valori massimi possibili impostati supportati per la casella del database.


Codice sorgente - presumibilmente VB.NET

  1. If TB_Filtro_ODODA.Text = "" Then TB_Filtro_ODODA.Text = "0"
  2.         If TB_Filtro_ODOA.Text = "" Then TB_Filtro_ODOA.Text = "9999.99"
  3.         If TB_Filtro_VMaxDa.Text = "" Then TB_Filtro_VMaxDa.Text = "0"
  4.         If TB_Filtro_VMaxA.Text = "" Then TB_Filtro_VMaxA.Text = "999.99"
  5.         If TB_Filtro_AVGDa.Text = "" Then TB_Filtro_AVGDa.Text = "0"
  6.         If TB_Filtro_AVGA.Text = "" Then TB_Filtro_AVGA.Text = "99.99"
  7.  
  8.  
  9.         Dim val1 = TB_Filtro_ODODA.Text
  10.         Dim val2 = TB_Filtro_ODOA.Text
  11.         Dim val3 = TB_Filtro_VMaxDa.Text
  12.         Dim val4 = TB_Filtro_VMaxA.Text
  13.         Dim val5 = TB_Filtro_AVGDa.Text
  14.         Dim val6 = TB_Filtro_AVGA.Text



Risolto, si fa per dire...  ma la consolazione è veramente magra dato che non riesco a darmi una risposta!

perchè per il controllo "MB_Chilometraggio.text" e rispettivo filtro ODODA 0 - ODOA 99999 mi visualizza il dato corretto 8888.88 (compreso nel range)
mentre per gli altri due MB_VelocitaMax.text e MB_VelocitaMedia.text con range da 0 a 99999 mi visualizza rispettivamente "888." e "88."?

Chiaramente ometto qualcosa di elementare...ma questo stupido enigma mi sta facendo impazzire!
qualcuno è in grado di chiarirmi l'errore/orrore che ho commesso?

grazie per l'aiuto!
:(

Ultima modifica effettuata da xone2003 il 14/02/2009 alle 10:43
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 15:11
Sabato, 14/02/2009
Usa Single o Double anziché Decimal, o più semplicemente usa un NumericUpDown per visualizzare i numeri (dato che è fatto apposto, al contrario della textbox).

PM Quote
Avatar
xone2003 (Normal User)
Rookie


Messaggi: 32
Iscritto: 27/11/2008

Segnala al moderatore
Postato alle 10:09
Lunedì, 16/02/2009
Ciao,

ho provato con single o double ma non funziona.

la textbox la uso come display di un risultato.

più che altro vorrei capire perchè su tre textbox affiancate nella stessa form (utilizzate nello stesso modo e prendendo i dati dallo stesso database ma da colonne diverse che portano dati simili), una da il risultato corretto e le altre due sono troncate!

non mi sembra logico al di là dell'uso di controlli + o - appropriati.

grazie.

PM Quote