Inleiding Is dit boek het juiste boek voor jou?



Dovnload 281.91 Kb.
Pagina6/8
Datum20.08.2016
Grootte281.91 Kb.
1   2   3   4   5   6   7   8

Een record verwijderen


Wat moet de code achter deze knop doen? Wel, om het netjes te doen moet je eerst controleren of er wel een record in de dataset zit. Als je immers uit een lege dataset een record probeert te verwijderen, loopt het mis. Dus heb je eerst een if … then constructie nodig die test of het aantal records in de dataset wel groter is dan 0.
If NawgegevensBindingSource.Count > 0 Then
En als het aantal records inderdaad groter is dan nul, moet het huidige record uit de dataset worden verwijderd.
NawgegevensBindingSource.RemoveCurrent()
Dan vertel je de BindingSource dat je klaar bent met het aanpassen (edit) van de dataset.
NawgegevensBindingSource.EndEdit()
En tenslotte moet de tekst in lblRecords nog aangepast worden. Wanneer de huidige record is verwijderd, kom je immers vanzelf op een ander record terecht. En wel het record vóór het net verwijderde record. Dus voeg je de aanroep van de subroutine NawgegevensBindingSourcePositionChanged nog toe.
NawgegevensBindingSourcePositionChanged()
In het Catch gedeelte voeg je weer een messagebox met toepasselijke tekst toe.


  1. Dubbelklik op btnVerwijder knop om de click subroutine aan te maken.

  2. Voeg de benodigde code toe.

De hele subroutine ziet er dan als volgt uit:


Private Sub btnVerwijder_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerwijder.Click

Try


If NawgegevensBindingSource.Count > 0 Then

NawgegevensBindingSource.RemoveCurrent()

NawgegevensBindingSource.EndEdit()

NawgegevensBindingSourcePositionChanged()

End If

Catch


MsgBox("Kan record niet verwijderen.")

End Try


End Sub


  1. Test de nieuwe code.

De wijzigingen in de dataset opslaan in de onderliggende database


Alle wijzigingen die tot nu toe zijn gemaakt, zijn alleen doorgevoerd in de dataset. Dit zijn de gegevens die je bij het laden van je form vanuit de achterliggende database naar ProfielkeuzesDataSet hebt geladen en daarna in je formulier hebt gebruikt. Dit is een kopie van de gegevens in de database op schijf. De originele, ongewijzigde gegevens staan nog steeds in de database op schijf. In vorige versies van Visual Basic werden alle wijzigingen in de dataset onmiddellijk bijgewerkt in de database op schijf. Bij VB.NET is dit standaard niet zo. Wijzigingen worden alleen bijgehouden in de dataset. Het bijwerken in de database gebeurt later. Dit is gedaan om het dataverkeer tussen de dataset in je formulier en de database op schijf te beperken. Hier wordt je programma sneller van, zeker als je formulier een webpagina is en al het dataverkeer via het internet gaat. Het nadeel is wel dat je er om moet denken de wijzigingen in de dataset bij te werken in de database op schijf.
Om het dataverkeer tussen je formulier en de database op schijf zo klein mogelijk te houden heeft Microsoft nog iets slims bedacht. Je formulier stuurt niet de hele dataset, inclusief wijzigingen terug naar de database op schijf, maar alleen de gewijzigde records. Die overschrijven dan de desbetreffende records in de database op schijf.
NawgegevensBindingSource heeft keurig bijgehouden in welke records iets is gewijzigd. Bij de records die gewijzigd zijn en waarbij het aanpassen is beëindigd, bij voorbeeld doordat de gebruiker naar een andere record is gegaan, is de eigenschap RowState veranderd in modified (aangepast). En alleen records met een RowState modified worden naar de onderliggende database weggeschreven.

Er is één situatie die mogelijk roet in het eten kan gooien. En wel als de gebruiker iets heeft gewijzigd in het huidige record en daarna niet meer naar een ander record is gegaan. De eigenschap RowState van dit laatst gewijzigde record is dan nog niet modified. Zo zou deze laatste wijziging niet meegenomen worden bij het opslaan. Om dit toch af te dwingen voeg je aan het begin van de code een extra regel toe die er voor zorgt dat de edit operatie wordt afgesloten en de eigenschap RowState van het laatste record toch wordt veranderd in modified:


NawgegevensBindingSource.EndEdit()
In het begin van dit hoofdstuk, onder het kopje Gegevens ophalen heb je al gelezen dat je voor het ophalen en wegschrijven van gegevens bepaalde commando’s nodig hebt. Deze commando’s bevinden zich in een zogenaamde TableAdapter, ook wel DataTableAdapter genoemd. Je kunt een TableAdapter opdracht geven om het commando om alle veranderingen in de dataset naar de onderliggende database weg te schrijven uit te voeren. Dit gaat met Update(). De TableAdapter in dit project is bij het aanmaken van de BindingSource automatisch is gemaakt en heet NawgegevensTableAdapter.


  1. Kijk onder in het design scherm.

Je ziet dan de TableAdapter NawgegevensTableAdapter.


De code om de NawgegevensTableAdapter zijn Update (werk bij) commando uit te laten voeren is:
NawgegevensTableAdapter.Update(ProfielkeuzesDataSet)
Een TableAdapter kan commando’s voor meerdere datasets bevatten. Vandaar dat tussen haakjes vermeld staat welke dataset moet worden geüpdate.
En tenslotte moet je de dataset laten weten dat alle aanpassingen inmiddels zijn opgeslagen en dat hij ze niet meer als aanpassingen mag onthouden.
ProfielkeuzesDataSet.AcceptChanges()
Natuurlijk moet je ook nog controleren of het bijwerken gelukt is, en als dat niet zo is, de gebruiker waarschuwen. Dat gaat weer met een Try – Catch – End Try constructie.


  1. Genereer een subroutine btnOpslaan_Click door te dubbelklikken op de btnOpslaan knop.

  2. Pas de code als volgt aan:

Private Sub btnOpslaan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpslaan.Click

Try

NawgegevensBindingSource.EndEdit()



NawgegevensTableAdapter.Update(ProfielkeuzesDataSet)

ProfielkeuzesDataSet.AcceptChanges()


Catch

MsgBox("Het opslaan is niet gelukt.")

End Try

End Sub



  1. Controleer of de code goed werkt en breng eventueel verbeteringen aan.



1   2   3   4   5   6   7   8


De database wordt beschermd door het auteursrecht ©opleid.info 2017
stuur bericht

    Hoofdpagina