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 hh🇲🇲ss) - hört/liest sich echt gut - werde mal damit testen.
    Zu finden Namespace: System.Globalization.DateTimeFormatInfo

    Gruss

    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


Log in to reply