Toon posts:

[VB.NET 2005] Edit record met bindingsource in dataset

Pagina: 1
Acties:
  • 300 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo,
Ik heb een probleem met het wijzigen van een fout ingevoerde record.
Ik heb een formulier met een aantal textboxen en een datagridview die een DS als datasource heeft.
De textboxen zijn met databinding gebonden aan de dataset.
Ik wil nu een aantal records invoeren en maak expres bij een of meerdere record(s) een fout.
Deze ondervang ik in een try & catch methode dat gaat allemaal goed, hij doet nog geen fill actie omdat de update actie mislukt. Dus de gegevens staan nog in de dataset dus ook nog in de datagridview en nu wil ik deze record(s) verbeteren door een juiste waarde in te voeren, maar nu komt het probleem, vb.net blijft deze 1e foutmelding herhalen. Ik weet ook wel hoe dat komt, omdat ik bindingsource.EndEdit() doe op de save_click. Maar als ik deze regel weghaal blijft ie ook de 1e foutmelding herhalen. Dus daar ligt het blijkbaar niet aan. Ik heb nu een aantal uur gezocht naar een soort van beginedit property voor de bindingsource, iets zodat ik weer de record kan editen dat is denk ik de oplossing. Maar ik kan het nergens vinden, ik heb dingen zoals resumebindings gedaan en met de datarowview heb je wel beginedit(), dat heb ik ook geprobeerd, heeft ook geen effect.
Weet iemand waarom ik deze foute record niet meer kan aanpassen/verbeteren ?
Heeft het misschien iets met de DataSet te maken ofzo ? Ik hoop dat iemand dit probleem ook ooit eens heeft gehad. Hieronder stuur ik een stukje code wat ik gebruik voor dit formulier.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Private Sub Nieuw_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Nieuw.Click
        dim drv As DataRowView
        tabelnaamBindingSource.EndEdit()
        drv = tabelnaamBindingSource.AddNew
End Sub

Private Sub Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Save.Click
        Me.Validate()
        tabelnaamBindingSource.EndEdit()
        If DS.HasChanges = True Then
            If Not DS.HasErrors Then
                Try
                    tabelnaamTableAdapter.Update(DS.tabelnaam)
                    tabelnaamTableAdapter.Fill(DS.tabelnaam)
                    DataGridView1.Refresh()

                Catch ex As OleDb.OleDbException
                    PrintRowErrs(DS)
                End Try
            Else
                PrintRowErrs(DS)
            End If
        Else
            MsgBox("geen veranderingen")
            Exit Sub
        End If
    End Sub

    Function PrintRowErrs(ByVal dataSet As DataSet)
        Dim row As DataRow
        Dim table As DataTable
        For Each table In dataSet.Tables
            For Each row In table.Rows
                If row.HasErrors Then
                    MsgBox(row.RowError)
                End If
            Next
        Next
    End Function

Verwijderd

Topicstarter
nobody ???? ik ben er nog steeds niet achter hoe ik het kan oplossen. Ik hoop dat iemand mij kan helpen vandaag. :*)

Verwijderd

Topicstarter
na erg lang kloten en dingen proberen is het gelukt :*)
die ds.haserrors was de boosdoener. Hieronder de juiste code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    Private Sub Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Save.Click
        Me.Validate()
        tabelnaamBindingSource.EndEdit()
        If DS.HasChanges = True Then
            Try
                tabelnaamTableAdapter.Update(DS.tabelnaam)
                tabelnaamTableAdapter.Fill(DS.tabelnaam)
                DataGridView1.Refresh()

            Catch ex As OleDb.OleDbException
                PrintRowErrs(DS)
                Exit Try
            End Try
        End If
    End Sub

Verwijderd

Topicstarter
Die HasChanges() is ook overbodig, zou kan die ook gewoon
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
    Private Sub Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Save.Click 
        Me.Validate() 
        tabelnaamBindingSource.EndEdit() 
            Try 
                tabelnaamTableAdapter.Update(DS.tabelnaam) 
                tabelnaamTableAdapter.Fill(DS.tabelnaam) 
                DataGridView1.Refresh() 

            Catch ex As OleDb.OleDbException 
                PrintRowErrs(DS) 
                Exit Try 
            End Try 
    End Sub

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Dan voert hij een complete roundtrip, met refill en al uit, terwijl er niets gewijzigd is. Lijkt me niet handig.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Verwijderd

Topicstarter
kenneth schreef op dinsdag 25 juli 2006 @ 12:08:
Dan voert hij een complete roundtrip, met refill en al uit, terwijl er niets gewijzigd is. Lijkt me niet handig.
Daar zit wat in ja. Dan zet ik die HasChanges gewoon weer terug.
Weet jij trouwens hoe RejectChanges werkt ?
dus een Dataset en/of DataTable.RejectChanges.

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 20:01
Verwijderd schreef op dinsdag 25 juli 2006 @ 15:09:
[...]


Daar zit wat in ja. Dan zet ik die HasChanges gewoon weer terug.
Weet jij trouwens hoe RejectChanges werkt ?
dus een Dataset en/of DataTable.RejectChanges.
Voor dat soort dingen moet je gewoon even kijken in de online help (MSDN) -> hier.

Verwijderd

Topicstarter
Sybr_E-N schreef op dinsdag 25 juli 2006 @ 15:13:
[...]


Voor dat soort dingen moet je gewoon even kijken in de online help (MSDN) -> hier.
Ja daar ben ik al uitgebreid geweest. Heb ook al aardig wat testen gedaan maar kom er niet uit. Ik moet er denk ik een aparte post voor openen. Ik heb 1 formulier en daarop worden 3 tabellen gevuld. Deze zijn van elkaar afhankelijk alleen kan er geen relatie tussen leggen ( te lang verhaal om uit te leggen). Tussen 2 tabellen ligt wel een relatie en de 3e niet, maar een veld (code) moet wel in alle 3 de tabellen voorkomen. Als er een error ontstaat in een van de 3 tabellen wil ik dus een rollback.
Ik heb dit gedaan met rejectchanges maar hij werkt niet. Als ik in de 3e tabel expres een fout maak op het form en ik doe save, geeft ie de melding maar hij voegt wel de record in tabel 1 en 2 toe en niet in tabel3. Maar ik wil dus dat die in tabel1 en 2 ook niet toegevoegd worden
Pagina: 1