none
Eine benutzerdefinierte Funktion zur Syntax der DataColumns-Expression-Eigenschaft hinzufügen? RRS feed

  • Frage

  • Meine Frage:

    1) geht das überhaupt?

    2) kann man sowas über die DataTable-Events verwirklichen?

    Mein Ansatz wäre folgender:

    Partial Class BeispielDts
        Partial Class SortenKatalogDataTable
            Private Sub Tabelle_RowChanged(sender As System.Object, e As SortenKatalogRowChangeEvent) Handles Me.SortenKatalogRowChanged
                If e.Action <> DataRowAction.Add Then Return
                Dim sk = New SortKey
                sk.SetSortKey(CULng(e.Row.KatalogID))
                e.Row.PM = CInt(sk.PM)
                e.Row.Technologie = CInt(sk.TechNummer)
                e.Row.Farbe = CInt(sk.FarbCode)
                e.Row.Grammatur = CInt(sk.Grammatur)
            End Sub
        End Class
    End Class

    Hier werden beim Adden einer Zeile an den hinzugefügten nicht datenhaltenden Columns(.PM, .Technologie, .Farbe, .Gramm) anhand der datenhaltenden Column (.KatalogID) Berechnungen vorgenommen. Wie geht das beim Ändern der aktiven Zeile, ohne eine Ereigniskette auszulösen???

    mfg

    VB1963


    • Bearbeitet VB1963 Dienstag, 28. August 2012 14:26
    Dienstag, 28. August 2012 14:23

Antworten

  • Hallo,

    aus dem Beispiel zu 2.) konnte ich nicht wirklich was herauslesen.

    Wenn man mehrere Spalten ändert - wie oben angedeutet - so ist eine Ereignisflut i. a. nicht zu vermeiden, siehe Behandlung von DataTable-Ereignissen

    Deswegen empfiehlt es sich i. a. normalisierte Daten zu verwenden, wo solche "Aufstände" nicht passieren. Aber wie gesagt, aus Deinem Beispiel kann man nicht viel erkennen.

    Gruß Elmar

    • Als Antwort markiert VB1963 Freitag, 7. September 2012 15:46
    Mittwoch, 29. August 2012 16:11
    Beantworter
  • Hallo, vielen Dank nochmals für die rasche Antwort!

    Gruß Ernst

    • Als Antwort markiert VB1963 Freitag, 7. September 2012 15:47
    Mittwoch, 29. August 2012 17:00

Alle Antworten

  • Hallo,

    nein, das geht nicht.  Die Ausdrücke können nicht erweitert werden.

    Das gilt sowohl für die DataColumn.Expression wie auch Filter bei DataTable.Select, DataView usw.

    Gruß Elmar

    Mittwoch, 29. August 2012 05:48
    Beantworter
  • Danke für deine Antwort!

    Ich nehme an, deine Antwort bezog sich nur auf Frage 1) ?

    Daher stelle ich die 2. Frage nochmals.

    Als Ausweg hätte ich obiges lauffähiges Listing gemeint.

    Hier werden beim Tabellenaufbau (DataRowAction.Add ) alle berechneten Spalten aktualisiert.

    Beim Ändern einer werthaltenden Spalte (DataRowAction.Change) der aktiven Zeile wird eine Ereigniskette ausgelöst...

    Die folgende Zeile verhindert das.

    If e.Action <> DataRowAction.Add Then Return

    Wie könnte ich das Change-Ereignis behandeln, ohne eine Ereigniskette auszulösen?


    Gruß Ernst
    • Bearbeitet VB1963 Mittwoch, 29. August 2012 15:44
    Mittwoch, 29. August 2012 15:15
  • Hallo,

    aus dem Beispiel zu 2.) konnte ich nicht wirklich was herauslesen.

    Wenn man mehrere Spalten ändert - wie oben angedeutet - so ist eine Ereignisflut i. a. nicht zu vermeiden, siehe Behandlung von DataTable-Ereignissen

    Deswegen empfiehlt es sich i. a. normalisierte Daten zu verwenden, wo solche "Aufstände" nicht passieren. Aber wie gesagt, aus Deinem Beispiel kann man nicht viel erkennen.

    Gruß Elmar

    • Als Antwort markiert VB1963 Freitag, 7. September 2012 15:46
    Mittwoch, 29. August 2012 16:11
    Beantworter
  • Hallo, vielen Dank nochmals für die rasche Antwort!

    Gruß Ernst

    • Als Antwort markiert VB1963 Freitag, 7. September 2012 15:47
    Mittwoch, 29. August 2012 17:00