2017-03-08 1 views
0

Ich habe ein Problem mit der Konvertierung von DateTime-Format in Datagridview. Grundsätzlich ist das der Fall: In der Datenbank habe ich 4 Spalten mit dem Typ: TIMESTAMP ohne Zeitzone. Ich erreiche diese Daten aus der Datenbank mit SQL-Abfrage und was ich will, ist TIMESTAMP ohne Zeitzone Typ ohne Datum, nur Zeit zu schreiben.Wie nehme ich nur einen Teil von TIMESTAMP ohne Zeitzone und setze ihn in datagridview mit C#?

Ex. erste Zeile Spalte "Ankunft" hat Wert: "2017-03-08 14:44:32", ich möchte "14:44:32" aus dieser Zelle nehmen und es in Datagridview Spalte "Ankunft" platzieren. Wenn ich einen Befehl wie:

foreach (DataRow row in dt.Rows) 
{ 
    string spremanje_string = row["Arrival"].ToString(); 
    string pretvorba = spremanje_string.Substring(spremanje_string.IndexOf(' ') + 1); 
    row["Arrival"] = DateTime.ParseExact(pretvorba, "HH:mm:ss", CultureInfo.InvariantCulture); 
} 

(Dont Geist foreach, es ist nur ein Teil des Codes aus dieser Schleife).

C# gibt mir eine Fehlermeldung, dass:

An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll 

Additional information: String was not recognized as a valid DateTime. 
+0

Warum müssen macht es ein 'DateTime' statt nur ein' String 'oder vielleicht ein' TimeSpan'? – juharr

+0

Ich habe die Regeln nicht gemacht =) –

+0

Sie wollen ein Datum ohne Datum?Das ist kein Datetime – EpicKip

Antwort

1

I 3 denke an Lösungen,

  1. Set Default einfachste Methode
  2. Stellen Sie das Format, nachdem Sie Ihre Datagridview gefüllt (was Sie haben es in Ihrem ForEach versucht).
  3. Stellen Sie das Format, bevor die Daten in geht

Beispiel Nr. 1:

dataGridViewName.Columns["columnName"].DefaultCellStyle.Form‌​‌​at = "HH:mm:ss"; 

Beispiel nr 2:

foreach (DataRow row in dt.Rows) 
{ 
    string dateTime = row["Arrival"].ToString(); 
    string time = dateTime.Split(' ')[1]; 
    //Do not convert to DateTime, no use if you will only use it to display (string) 
    row.Cells["Arrival"].Value = time; 
} 

Beispiel nr 3:

Wenn das Datum Wert des Hinzufügen von Datagridview (dies wird nicht so weit mit einer Datasource arbeiten, wie ich weiß):

dateTimeValue.TimeOfDay.ToString() 
+0

Ich habe eine Frage: in Ex. nr 1: meinst du, dass ich das tun muss, nachdem ich das getan habe: 'datagridview1.DataSource = dt;' –

+0

Diese foreach basiert auf deiner, lege sie dort ab, wo du sie hast. Aber wenn man annimmt, dass es einen Wert vom DataGrid benötigt, muss das Grid zuerst Werte enthalten. – EpicKip

+0

Ja, nachdem Sie die DataSource – EpicKip

0

Wenn Ihre row [ „Arrival“] Datetime Sie .TimeOfDay verwenden können.

Dies gibt Ihnen eine TimeSpan.

So haben Sie mehrere mögliche Lösungen hier:

  • Sie die Art der Zeile ändern kann [ „Arrival“] Timespan und erhalten TimeOfDay, wenn beim Lesen aus der Datenbank sein.

  • Wenn Sie nur die Zeit anzeigen müssen (keine Sortierung, Bearbeitung), verwenden Sie .ToString ("HH: mm: ss") für DateTime, um eine Zeichenfolge zu erhalten.

  • Wenn Sie WPF verwenden Sie einen Datagridtextcolumn und String verwenden = {HH: mm: ss} in Ihrem

    Bindung
Verwandte Themen