berechnete Spalten

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von TS71M.

    berechnete Spalten

    Komme gerade mal wieder nicht weiter...

    Als vereinfachtes Beispiel:
    Ich habe eine Tabelle mit Produkten und eine Child Tabelle mit Preisen, die sich von Zeit zu Zeit ändern, d.h. sie können steigen oder fallen.

    Meine Frage: kann ich den letzten/aktuellsten Preis in einer berechneten Spalte in der Produkttabelle anzeigen lassen?

    So in etwa:
    Spalte: LatestPrice
    Expression: Max(Child(FK_Product_Price).PriceDate).Price

    Oder wie sonst lässt sich so etwas am Einfachsten/Besten realisieren?
    Probier es doch einfach aus.

    Aufgrund der Bezeichnung für die Relation davon ausgehend, dass Du Dich in einem tDS bewegst: Deine Formel passt fast. Ich hab jetzt mal späßleshalber und bei den ersten Versuchen funktionierend das hier in der Item-Table bei HighestPrice bei Expression verwendet: Max(Child(FK_Item_Price).Value)

    Die Price-ItemID ist mit der Item-ID gekoppelt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ja es gibt da die Member First oder Last nicht... Ich glaube sogar, dass das so auch nicht geht...
    Ich würde das gleich ins Dataset verlagern und dort mit Code diese Berechnung umsetzen.
    Ich habe so etwas schon einmal vorgeschlagen - da wurde aber anderes berechnet...
    Zur Veranschaulichung:
    MYSQL Daten, Takt berechnen
    Ja, das war natürlich dämlich gelesen.
    Aber wenn Du in die DataSet-VB gehst (z.B. Doppelklick auf die Price-DataTable), kannst Du Code verwenden. LatestPrice (statt HighestPrice) auf ReadOnly=false und dann

    VB.NET-Quellcode

    1. Partial Public Class PriceDataTable
    2. Private Sub PriceDataTable_PriceRowChanged(sender As Object, e As PriceRowChangeEvent) Handles Me.PriceRowChanged
    3. e.Row.ItemRow.LatestPrice = e.Row.ItemRow.GetPriceRows.First(Function(x) x.PriceDate = e.Row.ItemRow.GetPriceRows.Max(Function(y) y.PriceDate)).Value
    4. End Sub
    5. End Class

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    e.Row.ItemRow.LatestPrice
    Den Member ItemRow kann ich bei mir nicht finden? Und wenn du Item verwendest, wird's dann untypisiert...
    EDIT: Uuuup's - jaja -> die Benennung von Tabellen und Controls! Die Parenttable heisst ja Item (würd ich nie machen...) und da habe ich dann natürlich auf den Table-Member Item gedacht...
    Ich habe @TS71M 's Anliegen so verstanden, dass er den zuletzt erstellten Preis in der Pricing-Tabelle bei der übergeordneten Tabelle Produkt als berechnete Spalte haben möchte...
    Da schaut's bei bei mir dann so aus:

    VB.NET-Quellcode

    1. Partial Class SampleDts
    2. Partial Class PricingDataTable
    3. ''' <summary>
    4. ''' hier wird der Preis der letzten Auspreisung zur übergeordneten Produkttabelle übergeben
    5. ''' </summary>
    6. Private Sub PricingDataTable_PricingRowChanged(sender As Object, e As PricingRowChangeEvent) Handles Me.PricingRowChanged
    7. e.Row.ProductRow.LastPrice = Me.Last(Function(r) r.ProductID = e.Row.ProductRow.ID).Price
    8. End Sub
    9. ''' <summary>
    10. ''' automatische Datumsangabe
    11. ''' </summary>
    12. Private Sub PricingDataTable_TableNewRow(sender As Object, e As DataTableNewRowEventArgs) Handles Me.TableNewRow
    13. DirectCast(e.Row, PricingRow).DateOfPrice = DateTime.Today
    14. End Sub
    15. End Class
    16. End Class

    Ich habe dazu ein kleines Sample angehängt...
    Dateien

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VB1963“ ()