PDA

View Full Version : [C# ]Problema con binding database access->label


Granzy94
26-07-2011, 20:56
ho settato il tipo valuta (euro) su una colonna di un database access!

ho connesso il database!e fin qui tutto ok!

poi ho attivato il databinding di qulla colonna su una label del mio form!
il valore si visualizza tranquillamente, ma non in modo corretto!

mi spiego meglio!

se sul databse metto questo valore:

€ 1500,60

sulla label me lo scrive arrotondato:

€ 1501,00

e non capisco il motivo!


mi scusco se non avete capito niente, ma sono ancora un neoprogrammatore(molto neoprogrammatore) e non uso ancora la terminologia corretta!!

Granzy94
27-07-2011, 19:20
ecco!
tutte le volte che scrivo in questo forum non ottengo risposta! neanche un "non ho capito una tega di quello che hai scritto!"

sembra che non ci siano segni di vita in questo forum!

RaouL_BennetH
28-07-2011, 12:34
Non so access come opera con i numeri, cmq, a orecchio credo che ti basti fare una cosa del genere:



double tuoValore = tuoValoreDalDatabase;

tuaLabel.Text = tuoValore.ToString("N2");

Granzy94
28-07-2011, 19:11
con questo metodo avrei un problema!
perchè io per acquisire il dato faccio il databinding!

e il valore lo prendo dalla label!

x=Convert.ToDouble(label.text);

così!

adesso vedo se c'è un'altro modo per estrarre il valore!

Granzy94
29-07-2011, 10:56
ho trovato questo codice per estrarre i valori!

cmd = new OleDbCommand("SELECT COUNT(*) FROM FattureAcquisto", fatt);
fatt.Open();

OleDbDataReader dr = cmd.ExecuteReader();


while (dr.Read())
{
label.Text = dr[0].ToString();
}
fatt.Close();




FattureAcquisto è la tabella!

in quetso modo alla fine dovrebbe restisturimi sulla label l'ultimo valore della colonna che io specifico!
finche lascio la colonna 0 che corrisponde all'id funziona!

quando provo la colonna 1 il programma si blocca e mi dice che vado oltre i limiti della matrice!

boh!! qualcuno può aiutarmi?

bio82
29-07-2011, 14:42
ho trovato questo codice per estrarre i valori!

cmd = new OleDbCommand("SELECT COUNT(*) FROM FattureAcquisto", fatt);
fatt.Open();

OleDbDataReader dr = cmd.ExecuteReader();


while (dr.Read())
{
label.Text = dr[0].ToString();
}
fatt.Close();




FattureAcquisto è la tabella!

in quetso modo alla fine dovrebbe restisturimi sulla label l'ultimo valore della colonna che io specifico!
finche lascio la colonna 0 che corrisponde all'id funziona!

quando provo la colonna 1 il programma si blocca e mi dice che vado oltre i limiti della matrice!

boh!! qualcuno può aiutarmi?

la tua query ti ritorna una sola colonna contenente il conteggio dei record che hai richiesto (tutti in questo caso)...non ti torna l'id...

dovresti fare un SELECT della colonna che vuoi e chiedere solo l'ultimo valore...


cmd = new OleDbCommand("SELECT colonnadesiderata FROM FattureAcquisto ORDER BY colonnaid DESC", fatt);
fatt.Open();

label.Text newProdID = cmd.ExecuteScalar()

fatt.Close();




così a botto...se vuoi solo l'ultimo valore dovrebbe funzionare e avere ben più senso del metodo che usavi (assegnare il valore di label.text dentro il cliclo)..ovviamente ti darà errore se non hai almeno un record...

fammi sapere se è comprensibile...è qualche mesetto che non scrivo una riga di codice (sono quasi 4 anni che ho abbandonato il settore)..

bio

Granzy94
29-07-2011, 18:44
a me servirebbe tutta la tabella!

comunque fino adesso facevo in questo modo:

databinding sulla label

poi facevo


for(int i=0;i<lungFatt;i++)
{
x[i]=Convert.ToInt64(label.text);
this.fattureAcquistoDataBindingSource.MoveNext();
}


questo è solo un esempio!

se mi trovi un modo migliore per acquisire i dati mi andrebbe bene!
devo acquisirli in un vettore di record fatto così

struct Fatt
{
long ID;
string azienda;
long nFattura;
string data; //La data mi va bene come stringa! non voglio complicarmi la vita ancora di più
decimal imponibile;
int iva;
decimal totale;
};

Granzy94
30-07-2011, 10:27
la tua query ti ritorna una sola colonna contenente il conteggio dei record che hai richiesto (tutti in questo caso)...non ti torna l'id...

dovresti fare un SELECT della colonna che vuoi e chiedere solo l'ultimo valore...


cmd = new OleDbCommand("SELECT colonnadesiderata FROM FattureAcquisto ORDER BY colonnaid DESC", fatt);
fatt.Open();

label.Text newProdID = cmd.ExecuteScalar()

fatt.Close();




così a botto...se vuoi solo l'ultimo valore dovrebbe funzionare e avere ben più senso del metodo che usavi (assegnare il valore di label.text dentro il cliclo)..ovviamente ti darà errore se non hai almeno un record...

fammi sapere se è comprensibile...è qualche mesetto che non scrivo una riga di codice (sono quasi 4 anni che ho abbandonato il settore)..

bio

con il tuo metodo mi restituisce un tipo object e quindi non mi permette di assegnarlo a una label.Text!