Fragen zu DataRow-Expression / typisiertes DataSet

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Peterle.

    Fragen zu DataRow-Expression / typisiertes DataSet

    Hallo,

    ich möchte mittels Expression einen Tabellenwert berechnen, sofern zwei andere Werte <> 0 sind. Sprich ein entsprechender Wert wird im DataGridView geändert und es erfolgt eine Berechnung. Das funktioniert auch, solange ich nach der Werteingabe im DGV die Zeile verlasse. Solange ich in den Zellen der selben Zeile umherklicke, wird die Expression nicht ausgeführt. Womit ist das Ausführen einer Expression verknüpft bzw. mit welchem Event!? Gibt es Möglichkeiten dort einzugreifen, z.B. die Expression manuell auszuführen?

    An welcher Stelle würde man sonst sinnvollerweise den Wert einer typisierten Tabelle berechnen lassen, in Abhängigkeit von zwei anderen Tabellenspalten? Ich hatte versucht es im RowChanged-Event der Tabelle zu machen, doch dies führte offenbar zu einer Endlosschleife (Wert geändert = Wert berechnet = Wert geändert =…).

    VB.NET-Quellcode

    1. Partial Class dsMeasurementPartial Public Class TemperaturKurvenSegmenteDataTable
    2. Private Sub TemperaturKurvenSegmenteDataTable_TemperaturKurvenSegmenteRowChanged(sender As Object, e As TemperaturKurvenSegmenteRowChangeEvent) Handles Me.TemperaturKurvenSegmenteRowChanged
    3. If e.Row.Haltezeit <> 0 And e.Row.MessIntervallRow.Messintervall <> 0 Then
    4. e.Row.Messwerte = CInt(e.Row.Haltezeit / e.Row.MessIntervallRow.Messintervall)
    5. End If
    6. End Sub
    7. End Class
    8. End Class

    Peterle

    Peterle schrieb:

    e.Row.Messwerte = CInt(e.Row.Haltezeit / e.Row.MessIntervallRow.Messintervall)

    If e.Row.Messwerte <> CInt(e.Row.Haltezeit / e.Row.MessIntervallRow.Messintervall) Then e.Row.Messwerte = CInt(e.Row.Haltezeit / e.Row.MessIntervallRow.Messintervall)
    oder

    VB.NET-Quellcode

    1. ​Partial Class dsMeasurementPartial Public Class TemperaturKurvenSegmenteDataTable
    2. Private Sub TemperaturKurvenSegmenteDataTable_TemperaturKurvenSegmenteRowChanged(sender As Object, e As TemperaturKurvenSegmenteRowChangeEvent) Handles Me.TemperaturKurvenSegmenteRowChanged
    3. If e.Row.Haltezeit <> 0 And e.Row.MessIntervallRow.Messintervall <> 0 Then
    4. Dim NewValue = CInt(e.Row.Haltezeit / e.Row.MessIntervallRow.Messintervall)
    5. If e.Row.Messwerte <> NewValue Then e.Row.Messwerte = NewValue
    6. End If
    7. End Sub
    8. End Class

    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Die Sache ist, dass ich mit anderen Events nicht mehr in typisierter Manier auf die Tabellendaten zugreifen kann, wie es z.B. per ColumnChanged-Event der Fall wäre:

    VB.NET-Quellcode

    1. Private Sub TemperaturKurvenSegmenteDataTable_TemperaturKurvenSegmenteColumnChanged(sender As Object, e As DataColumnChangeEventArgs) Handles Me.ColumnChanged
    2. End Sub


    Dann müsste ich wieder in nicht typisierter Form über Indizes und Spaltennamen gehen, um an die entsprechenden Daten zu kommen. Würde ich die Datenmanipulation direkt über's DGV machen, wäre es ja genauso. Gibt es eine Möglichkeit, ein...

    VB.NET-Quellcode

    1. Private Sub TemperaturKurvenSegmenteDataTable_TemperaturKurvenSegmenteRowChanged(sender As Object, e As TemperaturKurvenSegmenteRowChangeEvent) Handles Me.TemperaturKurvenSegmenteRowChanged
    2. End Sub


    ...Event manuell abzufeuern, z.B. per DGV-CellValueChangedEvent zu triggern?
    Wenn ich es richtig verstehe, möchtest du bei jeder DGV-Zelländerung die DataTable updaten.
    Was passiert wenn du im DGV.CellValueChanged Event ein DGV.EndEdit ausführst?
    Führt das nicht zu einem Update der gebundenen DataTable?

    Ich müsste da auch etwas rumprobieren, aber das überlasse ich gerne dir.
    Einfach kreativ sein!
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --