Anzeige von DateTime im DataGrid
-
Hallo,
ich habe in der Datenbank (SQL-Server) eine Spalte des Typs DateTime.
Wenn ich die Daten mit dem QueryAnalyzer abfrage bekomme ich Datum UND Zeit ausgegeben.
In meinem Programm nur das Datum.Was da wer was dazu?
Danke
Jürgen
-
das einfachste ist, für die spalte Format festzulegen: "dd.mm.yyyy MM:HH"
-
hmmm...
und wie baue ich das in mein Programm ein?
-
theoretisch geht es so:
1. du erstellst für deine DataGrid einen neuen TableStyle
2. für den neuen TableStyle erstellst du die Columns
3. für deine Datum Column setzt du die Format Eigenschaft auf "dd.mm. ..."DataGridTableStyle ts1 = null; // private variable // Irgendwo TableStyles einmal erstellen private void Form1_Load(object sender, System.EventArgs e) { ts1 = new DataGridTableStyle(); ts1.MappingName = "1"; // wird der Tabellenname // Spalten einfügen ts1.GridColumnStyles.Add(new DataGridTextBoxColumn()); ts1.GridColumnStyles[0].MappingName = "DAT_ERSTANLAGE"; // Mapping: Name aus dem SQL String ts1.GridColumnStyles[0].HeaderText = "Datum"; // Spaltenüberschrift ((DataGridTextBoxColumn)ts1.GridColumnStyles[0]).Format = "dd.mm.yyyy MM:HH"; // !!! Format // ..... // Das macht man natürlich für jede spalte // ..... } private void checkBox1_CheckedChanged(object sender, System.EventArgs e) { string strSQL; string TableName; // tabellenname. sieh oben if (checkBox1.Checked == true) { strSQL = "SELECT ARTIKEL_NR, BEZ, ZBEZ, KBEZ, DAT_ERSTANLAGE FROM abv.ARTIKEL"; dataGrid1.TableStyles.Clear(); // alte styles löschen dataGrid1.TableStyles.Add(ts1); // neuen hinzufügen TableName = "1"; // tabellenname. sieh oben } else { strSQL = "SELECT BEZ, ZBEZ, KBEZ FROM abv.ARTIKEL"; dataGrid1.TableStyles.Clear(); // alte styles löschen. // wenn man keine Styles hinzufügt, wird das automatisch erledigt. TableName = ""; // !!! kein mapping } SqlCommand cmd = new System.Data.SqlClient.SqlCommand(strSQL, sqlConnection1); sqlDataAdapter1.SelectCommand = cmd; DataSet ds = new DataSet(); ds.Tables.Add(new DataTable(TableName)); dataGrid1.DataSource = ds.Tables[0]; ds.Clear(); // <==== ist übrigens überflüssig, weil DS neu ist und dem zu folge leer sqlDataAdapter1.Fill(ds.Tables[0]); }
[EDIT]Kommentar zu lang [/EDIT]
-
Oh,
erst bin ich erschrocken, da die Anwendung International laufen soll. Habe mir dann aber mal die DateTimeFormatInfo Klasse angeschaut: Dort gibt es das Formatzeichen G, welches das kurze Datumsformat und das lange Zeitformat ausgeben soll (dd.mm.yyyy hhss) - hört/liest sich echt gut - werde mal damit testen.
Zu finden Namespace: System.Globalization.DateTimeFormatInfoGruss
Jürgen
-
Heisst das jetzt, dass mein Vorschlag Ok ist?
-
Hallo,
bin leider jetzt erst zum Testen gekommen - ja es funktioniert! Auch mit dem "G" als Formatzeichen.
Ich habe zum Testen nur mal die eine Spalte gemappt. Dann wird auch nur diese eine angezeigt. Es wird mir also nichts anderes bleiben, als - wie du bereits geschrieben hast - alle zu mappen.Besten Dank nochmals
Jürgen