Laden...

DataGridView: ganzahliger Wert wird trotz CellFormat = "n2" ohne Nachkommastellen angezeigt

Erstellt von okrim vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.901 Views
O
okrim Themenstarter:in
6 Beiträge seit 2013
vor 10 Jahren
DataGridView: ganzahliger Wert wird trotz CellFormat = "n2" ohne Nachkommastellen angezeigt

Hallo an alle,

bin absoluter Anfänger und hab gerade ein Problem wo ich troz Google nich dahinter komme woran es liegt.
Und zwar hab ich eine Spalte in einem dataGridView wo ich Stunden eintrage, wenn ich zum Beisbiel in einer textBox die 2 Stunden eintrag und dann auf einen Button Einfügen gehe, wird es in das dataGridView eingetragen und zwar mit zwei Kommastellen (2,00) und zugleich schreib ich den Wert in eine Access Datei mit OleDB.
Soweit alles gut, nur wenn ich den Wert wieder aus der Datenbank auslese und in das dataGridView schreibe kommt nur noch der wert 2 ohne ,00 habe schon mit folgender zeile versucht

   dataGridView1.Columns["grid_stunden"].DefaultCellStyle.Format = "n2";   

aber das funktioniert nicht, kann mir jemand sagen warum nicht!!!

Würde mich freuen wenn ihr mir helfen könntet.

Gruß Mirko

C
2.122 Beiträge seit 2010
vor 10 Jahren

Wie liest du den aus und als welcher Datentyp ist er gespeichert?

O
okrim Themenstarter:in
6 Beiträge seit 2013
vor 10 Jahren

Hallo chilic,

danke für deine Antwort, hier mal der Code mit dem ich es auslese und in dataGridView schreibe:


OleDbConnection cn1 = new OleDbConnection(dbconnect);
cn1.Open();
string sql_abfrage1 = "SELECT * FROM [data_kunden_stunden] WHERE datum = '" + aktuell_datum + "'";
OleDbCommand cmd1 = new OleDbCommand(sql_abfrage1, cn1);
OleDbDataReader dr1 = cmd1.ExecuteReader();
while (dr1.Read())
{
    i = dataGridView1.Rows.Count;
    dataGridView1.Rows.Add();
    dataGridView1.Rows[i].Cells["grid_kunde"].Value = (dr1["kunde"].ToString());
    dataGridView1.Rows[i].Cells["grid_taetigkeiten"].Value = (dr1["taetigkeit"].ToString());
    dataGridView1.Rows[i].Cells["grid_stunden"].Value = (dr1["stunden"].ToString());
    dataGridView1.Rows[i].Cells["grid_datum"].Value = (dr1["datum"].ToString());
    dataGridView1.ClearSelection();
    i++;
}
cn1.Close();

gespeicher wird es als Zahl, Feldgröße=Single, Format=Festkommazahl.

C
2.122 Beiträge seit 2010
vor 10 Jahren

gespeicher wird es als Zahl

Aber ins Grid wirds als String geschrieben. Den kann (und darf) das Grid nicht umformatieren. Schreib eine Zahl rein dann funktionierts.
Caste die Werte lieber statt ToString zu verwenden. ToString ist in diesem Fall unschön.
(int)dr1["stunden"]
Ohne Klammern drum herum

O
okrim Themenstarter:in
6 Beiträge seit 2013
vor 10 Jahren

Danke, habe es gleich ausprobiert jetzt kommt aber ein Fehler mit der Meldung > Fehlermeldung:

Die angegebene Umwandlung ist ungültig muss ich was anderes auch noch ändern?

Hab es jetzt so geschrieben:

dataGridView1.Rows_.Cells["grid_stunden"].Value = (int)dr1["stunden"];

Gruß Mirko

C
2.122 Beiträge seit 2010
vor 10 Jahren

Je nach Datentyp musst du halt das richtige beim Cast verwenden. Ich weiß nicht auswendig was Single genau ist, das wird (byte) oder so irgendwas sein.

771 Beiträge seit 2009
vor 10 Jahren

Single als .NET-Datentyp ist das Synonym für float (bei int oder byte würden Nachkommastellen ja keinen Sinn hier machen).

Statt dem Cast sollte man evtl. besser die DataReader-Methoden dafür benutzen, z.B.


int columnIndex = dr1.GetOrdinal("stunden");

cell.Value = dr1.GetFloat(columnIndex);

F
10.010 Beiträge seit 2004
vor 10 Jahren

Schon das reinfrickeln der Daten ins Grid ist der falsche Weg.

Lese die Daten per DataAdapter in eine DataTable und binde diese.

O
okrim Themenstarter:in
6 Beiträge seit 2013
vor 10 Jahren

Danke euch allen, da ich mich wirklich nicht sonderlich auskenne, besser gar nicht auskenne, habe ich es jetzt folgendermaßen gelöst.

dataGridView1.Rows_.Cells["grid_stunden"].Value = (float)dr1["stunden"];

und das Funktioniert 😃

Danke nochmal!!!