Laden...

Wie kann ich ein DataGridView als Parameter in einer Funktion verwenden?

Erstellt von ChookaC vor 3 Jahren Letzter Beitrag vor 3 Jahren 690 Views
C
ChookaC Themenstarter:in
14 Beiträge seit 2020
vor 3 Jahren
Wie kann ich ein DataGridView als Parameter in einer Funktion verwenden?

Hallo Community,

wie kann ich ein DataGridView Object als Parameter verwenden?

Dieses hier nimmt der Compiler:


private DateTime convertDateTime(object sender, DataGridViewCellEventArgs e, DataGridView DGName, string cellName, string format) { 
  // formatiert ein String -> DateTime 
  return convertedDateTime;
}

Es funktioniert aber nicht.

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ß.

Gibts nicht.

P
441 Beiträge seit 2014
vor 3 Jahren

Was genau du vor hast wird mir nicht ganz klar.

-> 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.

5.657 Beiträge seit 2006
vor 3 Jahren

Siehe dazu [Artikel] MVVM und DataBinding
Auch die Formatierung würde man im XAML definieren.

Weeks of programming can save you hours of planning

C
ChookaC Themenstarter:in
14 Beiträge seit 2020
vor 3 Jahren

Hallo,

ich habe mir eine Funktion gebaut die:

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.

Gibts nicht.

C
ChookaC Themenstarter:in
14 Beiträge seit 2020
vor 3 Jahren

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");
            }
        }

Gibts nicht.

C
ChookaC Themenstarter:in
14 Beiträge seit 2020
vor 3 Jahren

Anscheinend gehts. Manchmal hilft drüber reden ... 😉

War wahrscheinlich ein SEMIKOLON 😮)

Gibts nicht.

16.807 Beiträge seit 2008
vor 3 Jahren

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.

C
ChookaC Themenstarter:in
14 Beiträge seit 2020
vor 3 Jahren

Ok, verstehe was du meinst. Alternativ in die Config Datei? Habe da eine einfache txt.

Gibts nicht.

P
441 Beiträge seit 2014
vor 3 Jahren

Welche Config Datei?

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?

C
ChookaC Themenstarter:in
14 Beiträge seit 2020
vor 3 Jahren

Ok, das stimmt natürlich.

Hinweis von Abt vor 3 Jahren

Bitte keine FUll Quotes
[Hinweis] Wie poste ich richtig?

Gibts nicht.