C# DateTime Format in DataGrid WPF

GustlPC

Lt. Junior Grade
Registriert
Nov. 2008
Beiträge
338
Hallo,

ich habe ein Probelm bei dem ich einfach nicht weiterkomme.

Ich habe eine dynamische SQL Abfrage, welche, je nach Einstellung, x-beliebige Spalten aus der DB abfrägt.
Das Ergebnis weise ich einem SqlDataReader-Objekt zu.
Wenn ich den dbReader dann in einer DataTable lade, so:
Code:
dt.Load(dbReader);
Dann ist meine Spalte "Starttermin" als string-Format abgespeichert.
die DataTable weise ich dann meinen DataGrid zu:
Code:
dG_erg_table.ItemsSource = dt.DefaultView;
Jetzt kann ich aber leider in der DataGrid nicht nach dem Datum sortieren. Da er ja nach string sortiert.
Dann habe ich der Spalte "Starttermin" ein DateTime-Format zugewiesen, vor dem Load in die DataTable:
Code:
dt.Columns.Add("Starttermin", typeof(DateTime));

Jetzt ist das Format natürlich DateTime und wird folgendermaßen im DataGrid angezeigt:
"11/30/2012 12:00:00 AM"
Ich möchte aber gerne das ganze im folgendem Format: 30.11.2012
Sortieren über die Spalte klappt super, aber eben die Anzeige der Spalte nicht.

Weiß wer Rat? Wäre super!

Gruß Gustl
 
Zuletzt bearbeitet:
Das liegt daran, dass Bindings in WPF grundsätzlich mit der Culture "en-us" formatiert werden.
Wenn du die Spalten deines DataGrids nicht manuell zuweist, werden sie automatisch aus der ItemsSource (ein deinem Fall die DataTable) erzeugt. Das dabei erzeugte Binding kannst du nur sehr begrenzt beeinflussen.

Du musst also die Spalten deines DataGrids manuell definieren:
Code:
// Automatische Spaltenerzeugung ausschalten
dG_erg_table.AutoGenerateColumns = false; 

// Deutsche CultureInfo erzeugen.
CultureInfo germanCulture = CultureInfo.CreateSpecificCulture("de-DE");

// Binding erzeugen.
Binding binding = new Binding("Starttermin"); 
binding.ConverterCulture = germanCulture; // Richtige Culture zuweisen.

// Spalte erzeugen.
DataGridTextColumn column = new DataGridTextColumn();
column.Header = "Starttermin";
column.Binding = binding;

// Spalte einfügen.
dG_erg_table.Columns.Add(column)

// Für die anderen anzuzeigenden Spalten wiederholen.
Entscheidend ist, dass du dem Binding die richtige ConverterCulture zuweist.

Siehe auch: WPF Binding uses the wrong CurrentCulture by default.
 
Ok, danke. Das funktioniert auch.
Aber nun habe ich in der Spalte soetwas "27.09.2012 00:00:00" drin stehen.
Gibt es auch eine Möglichkeit diesen ANzeigestring noch im gleichen Zug umzuwandeln?
Habe es so probiert:
Code:
System.Windows.Data.Binding binding = new System.Windows.Data.Binding(string.Format("{0:D}", "Starttermin"));
Aber das hat leider auch nichts bewirkt.

Danke schonmal.
Gruß

Edit: Ich habs:
Code:
binding.StringFormat = "{0:D}";
:D

Dankeschön.
You make my day ;)
 
Zuletzt bearbeitet:
Zurück
Oben