bindingsource změna pozice   otázka

VB.NET, ADO.NET, WinForms, Databáze

Zdravím,

mám takový problém s bindingsource. Při události positionchanged testuji, zda nebyl záznam změněn, pokud ano, musí uživatel zadat přes messagebox, co chce provést - uložit záznam, zrušit změny nebo zůstat na záznamu.

1. problém je, že neexistuje příkaz e.cancel=true, takže nevím, jak mám zůstat na aktuální pozici

2. problém je, že na formu jsou mimo jiné i comboboxy, které jsou svázány na data násl.:

        Me.ComboBoxEx1.DataBindings.Add("SelectedValue", Me.BindingSource_DetailObjektu, "TypObjektu")

Pokud se formulář spustí, a uživatel přejde na jiný záznam, tak mu vyskočí hláška o změně záznamu, i když uživatel žádný záznam nezměnil. Pokud přeskočí na jiný záznam znovu, tak se hláška již nezobrazí. Pokud vyhodím bindování comboboxu, všechno funguje jak má. nesetkal se s tím někdo?

změnu záznamu hlídám násl:

    Private Sub BindingSource_DetailObjektu_PositionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles BindingSource_DetailObjektu.PositionChanged

        Me.BindingSource_DetailObjektu.EndEdit()

        If dsSysData.Tables("ObjektyVeSprave").GetChanges IsNot Nothing Then
            Dim result As New DialogResult
            result = MessageBox.Show("Byl změněn záznam. Chcete jej uložit?", "Změna", MessageBoxButtons.YesNoCancel)
            If result = Windows.Forms.DialogResult.Cancel Then
                'zůstat na aktuální pozici
            ElseIf result = Windows.Forms.DialogResult.Yes Then
                'uložit změny
                Me.BindingContext(dsSysData).EndCurrentEdit()
                daSysData_01.Update(dsSysData.Tables("ObjektyVeSprave").GetChanges())
                dsSysData.Tables("ObjektyVeSprave").AcceptChanges()
            ElseIf result = Windows.Forms.DialogResult.No Then
                'zrušit změny
                Me.BindingContext(dsSysData).CancelCurrentEdit()
                dsSysData.RejectChanges()
            End If
        End If

    End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

1. problém vyřešen:

Celý kód, který byl pod BindingSource_PositionChanged jsem přehodil do TreeView, který používám pro přesun mezi záznamy. Konkrétně do události BeforeSelect, kde je k dispozici e.cancel=true

Vypadá to tedy následovně:

    Private Sub ObjektyVeSprave_TreeView1_BeforeSelect(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles ObjektyVeSprave_TreeView1.BeforeSelect

        Me.BindingSource_DetailObjektu.EndEdit()

        If dsSysData.Tables("ObjektyVeSprave").GetChanges IsNot Nothing Then
            Dim result As New DialogResult
            result = MessageBox.Show("Byl změněn záznam. Chcete jej uložit?", "Změna", MessageBoxButtons.YesNoCancel)
            If result = Windows.Forms.DialogResult.Cancel Then
                'zůstat na aktuální pozici
                e.Cancel = True
            ElseIf result = Windows.Forms.DialogResult.Yes Then
                'uložit změny
                Me.BindingContext(dsSysData).EndCurrentEdit()
                daSysData_01.Update(dsSysData.Tables("ObjektyVeSprave").GetChanges())
                dsSysData.Tables("ObjektyVeSprave").AcceptChanges()
            ElseIf result = Windows.Forms.DialogResult.No Then
                'zrušit změny
                Me.BindingContext(dsSysData).CancelCurrentEdit()
                dsSysData.RejectChanges()
            End If
        End If

    End Sub

2. problém nadále přetrvává, jak mám ověřit, že data byla opravdu změněna?

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback