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
Wie liest du den aus und als welcher Datentyp ist er gespeichert?
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.
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
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
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.
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);
Schon das reinfrickeln der Daten ins Grid ist der falsche Weg.
Lese die Daten per DataAdapter in eine DataTable und binde diese.
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!!!