Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie kann ich ein DataGridView als Parameter in einer Funktion verwenden?
ChookaC
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

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

beantworten | zitieren | melden

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ß.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ChookaC am .
Gibts nicht.
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 355
Herkunft: Kassel

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

Siehe dazu [Artikel] MVVM und DataBinding
Auch die Formatierung würde man im XAML definieren.
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
ChookaC
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4001

beantworten | zitieren | melden

Das kannst du einfach per Debugger herausfinden, s. [Artikel] Debugger: Wie verwende ich den von Visual Studio?
private Nachricht | Beiträge des Benutzers
ChookaC
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

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 .
Gibts nicht.
private Nachricht | Beiträge des Benutzers
ChookaC
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Anscheinend gehts. Manchmal hilft drüber reden ... ;)

War wahrscheinlich ein SEMIKOLON :o)
Gibts nicht.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15695
Herkunft: BW

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
ChookaC
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Ok, verstehe was du meinst. Alternativ in die Config Datei? Habe da eine einfache txt.
Gibts nicht.
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 355
Herkunft: Kassel

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
ChookaC
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Ok, das stimmt natürlich.
Gibts nicht.

Moderationshinweis von Abt (02.12.2020 - 16:48:22):

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

private Nachricht | Beiträge des Benutzers