.NET Collection als Spalte in Datagridview (bspw. Summe aller Positionen einer Rechnung)

Hallo,

ich spiele derzeit ein bisschen mit dem EntityFramework 6.0 und SQLite herum. Ich nutze es dafür mir eine kleine Rechnungsverwaltung zu schreiben. Die Struktur meiner Datenbank für Rechnungen sieht so aus:
customer [id, anrede, name, strasse, …]
Belegkopf [id, customer_id, anrede, …]
Belegpos [id, belegkopf_id, anzahl, einzelpreis, gesamtpreis, …]

Erzeugt wir vom EntityFramework in der Klasse Belegkopf der Member belegpos vom Typ ObservableCollection. Der Customer Member belegkopf (auch vom Typ ObservableCollection) wird als Datasource für ein Datagridview verwendet (über eine BindingSource).

Jetzt gibt es ja bspw. das Attribute [System.ComponentModel.DisplayName(„RenamedProperty“)] , welches mir ermöglicht in der Klasse festzulegen das der Name im Datagridview „RenamedProperty“ ist. Ist es auch über ein Attribut möglich, dass festgelegt wird was die Spalte anzeigen soll.

Meine Idee war eine von ObservableCollection erbende Klasse zu erstellen und in dieser eine ReadOnly Eigenschaft zu implementieren, welche mir die Gesamtsumme ausrechnet. Ich weiss, sollte man eigentlich nicht machen, aber da es sich hier um ein kleines Projekt nur für mich handelt kann ich das verkraften in einer Eigenschaft eine Schleife auszuführen.

Soweit so einfach, jetzt habe ich aber das Problem das ich gerne über ein Attribut sagen würde, das soll dein Wert für ein Datagridview sein, ist die möglich oder hab ich da den falschen Ansatz und es geht viel einfacher?

Mit freundlichen Grüßen,

Michael (reifl)

Habe mein Problem jetzt gelöst. Bin leider auf dem Schlauch gestanden und nicht auf die Idee gekommen einfach ein eigenes CellTemplate zu schreiben. Damit hat sich das Problem für mich erledigt. Anbei noch der Code falls es jemanden interessiert, ist aber wie gesagt sehr einfach. Die Klasse BelegPosCollection ist von mir geschrieben und hat eine Funktion getFormattedValue().

class BelegPosDatagridviewCell : DataGridViewTextBoxCell
{
    protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
    {
        //Prüfen ob der Inhalt vom Typ BelegPosCollection ist
        if (typeof(BelegPosCollection).IsAssignableFrom(value.GetType()))
        {
            
            formattedValue = ((BelegPosCollection)value).getFormattedValue();
        }

        base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts);
    }
}

Gruß Michael (reifl)