Die Funktion soll aus einem CellContentClick Event aufgerufen werden, da TryParseExact etc. etc. zu lang ist möchte ich eine Funktion erschaffen die den Code vereinfacht und strukturiert.
Das DataGrid ist immer dasselbe bzw. soll ja übergeben werden können innerhalb der selben Klasse.
Gruß.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ChookaC am .
-> Wozu brauchst du das DGV, wenn du immer convertedDateTime zurück gibst?
-> Ich bin nicht sicher, was in sender drin steht, aber es müsste etwas vom DGV sein
In WPF solltest du MVVM verwenden. Hier kannst du dann das notwendige als Parameter binden.
DateTime.TryParseExact(datum, format, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out convertedDateTime);
wrapped sodass ich innerhalb der Klasse oder Form diese jederzeit aufrufen kann ohne das ich kilometerlange Codezeilen haben um und es einfach übersichtlicher zu machen.
DataGrid currDataGrid = sender as DataGrid;
var tmpRow = currDataGrid.Rows[e.RowIndex];
Dieses funktioniert auch nicht..
Also nach meinem Verständniß müsste die Objectinstanz von der ich zugreife in sender enthalten sein, diesen sender gebe ich auch einfach aus der aufrufenden Funktion aus dem betreffenden DataGrid an meine Hilfsfunktion weiter.
Sollte doch nicht so schwer sein, oder?
ist einfach "this" Scope, ich bewege mich ja innerhalb desselbe Scopes der Objektinstanz.
Ich kenne die Debugger Funktion. Leider bringt das nicht weiter, das Programm läuft ja nur reagiert es nicht wie gewünscht. Ich bekomme auch keinerlei Fehlermeldungen bzw. Feedback.
Ich denke es liegt datan das das sender Object nicht richtig weitervererbt wird bzw. weitergegeben wird.
Die Funktion:
/// Konvertiert ein Datumswert aus einer DataGridView an der aktuellen Stelle in das Datumsformat: "ddMMyyyy" oder "HHmmssff"
/// für eine Weiterverarbeitung in den Archiven unter Benutzung des DB2 Quell Datumsformats
/// <param name="DGName">Designated DataGrid.</param>
/// <param name="cellName">Designated Cell.</param>
/// <param name="format">Designated DateTime Format.</param>
/// <param name="replace">Designated replace Format like "date" or "time"</param>
/// <returns> convertedDateTime as DateTime.</returns>
private DateTime convertDateTime(object sender, DataGridViewCellEventArgs e, string cellName, string format, string replace) {
DataGridView currDataGrid = sender as DataGridView;
var tmpRow = currDataGrid.Rows[e.RowIndex];
DateTime convertedDateTime;
if (replace == "date") { replace = tmpRow.Cells[cellName].Value.ToString().Replace(".", ""); } else if (replace == "time") { replace = tmpRow.Cells[cellName].Value.ToString().Replace(":", ""); }
DateTime.TryParseExact(replace, format, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out convertedDateTime);
return convertedDateTime;
}
}
Die aufrufende Funktion (CellContentKlickEvent funktioniert):
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) {
try {
DataGridView currDataGrid = sender as DataGridView;
var tmpRow = currDataGrid.Rows[e.RowIndex];
//var tmpRow = dataGridView1.Rows[e.RowIndex];
this.showSecondaryDataGrid(sender, e, convertDateTime(currDataGrid, e, "Datum", "yyyyMMdd","date").ToString("yyyyMMdd"), tmpRow.Cells["ErstUhrzeit"].Value.ToString().Replace(":", ""), convertDateTime(currDataGrid, e, "ReorgDatum", "yyyyMMdd","date").ToString("yyyyMMdd")); // DateTime muss zurückgewandelt werden
} catch (Exception exc) {
MessageBox.Show(exc.ToString(), "Exception set Datasource to null");
logger.textLogging("Exception Datasource\n-----------" + exc + "\n-----------\n");
}
}
Dieser Beitrag wurde 6 mal editiert, zum letzten Mal von ChookaC am .
Im Endeffekt bleibt es aber eine Umsetzung, die man genau so eben nicht tun sollte.
Man sollte das im XAML machen; so ist es in WPF vorgesehen.
Mit so einem Vorgehen holt man sich - das zeigt die Erfahrung - rasch neue Probleme ins Haus, die man dann auch wieder nur mit einem Workaround lösen kann.
In deiner Oberflächenbeschreibung (=XAML), bzw dem View sollte die Repräsentation des Zeitstempels gesteuert werden.
P.S.:
So wie du TryParse..() verwendest ist es falscht. Nicht umsonst unterscheidet sich TryParse...() von Parse...().
P.P.S.:
Du übergibst ein Objekt dessen Typ du weißt trotzdem Boxed an deine convertDateTime Methode als object.
Dadurch bekommt die convertDateTime Methode mehr Aufgaben, als ihr Name aufzeigt und du bist in zweiter Instanz Typunsicher... was passiert, wenn sender in convertDateTime nicht vom Typ DataGridView ist?