Laden...

berechneten Wert in DataGridView darstellen

Erstellt von kstanger vor einem Jahr Letzter Beitrag vor einem Jahr 673 Views
K
kstanger Themenstarter:in
99 Beiträge seit 2022
vor einem Jahr
berechneten Wert in DataGridView darstellen

Hallo,
ich habe eine Liste von Objekten, die ich in einem DataGridView (DGV) darstelle. Ich möchte aber in einer Spalte einen berechneten Wert darstellen. Mir ist klar, dass DGV nur darstellt und nicht berechnet. Irgendwo auf dem Weg vom Objekt über die BindingSource muss eine Methode mit dem Berechnungsalgorithmus sein. Ich weiß nicht, wo ich das machen muss.
Kann mir jemand sagen, wie das geht oder wo das dokumentiert ist? Ich dachte, es würde mit Linq gehen, aber da habe ich nicht gefunden wie man eine Methode dort einbaut.

Karl Stanger
P
10 Beiträge seit 2022
vor einem Jahr

Hallo,

z.B. über den get-Accessor der Property, an die du bindest.

K
kstanger Themenstarter:in
99 Beiträge seit 2022
vor einem Jahr

Mein Code funktioniert nicht:


    public class Timing
    {
        private string _uhrzeit;

        public Timing()
        {
        }

        public Timing(int tagminute, Lichtquelle typ, int nummer, BZustand zustand)
        {
            Tagminute = tagminute;
            Typ = typ;
            Nummer = nummer;
            Zustand = zustand;
        }

        public int Tagminute
        {
            get => UhrzeitToTotalmin(_uhrzeit);
            set => _uhrzeit = TotalminToUhrzeit(value);
        }
        public Lichtquelle Typ { get; set; }
        public int Nummer { get; set; }
        public BZustand Zustand { get; set; }
    }

Die Spalte im DGV habe ich so definiert:


            DataGridViewTextBoxColumn dgvTextUhrzeit = new DataGridViewTextBoxColumn()
            {
                HeaderText = "Uhrzeit",
                DataPropertyName = "Tagminute",
            };

Was mache ich da falsch?

Karl Stanger
4.931 Beiträge seit 2008
vor einem Jahr

Du hast die Logik bzgl. der Eigenschaft und des Feldes vertauscht - bei dir wird _uhrzeit ja nie gesetzt, außer der Setter wird dafür explizit aufgerufen.
Du mußt es andersherum programmieren:


public class Timing
{
    // ...

    public string Uhrzeit
    {
        get => TotalminToUhrzeit(Tagminute);
        set => Tagminute = UhrzeitToTotalmin(value);
    }

     public Tagminute { get; set; }
     // ...
}

K
kstanger Themenstarter:in
99 Beiträge seit 2022
vor einem Jahr

Danke!
Irgendwie habe ich da auf dem Schlauch gestanden.

Karl Stanger