Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
De DataSet klassen en gerelateerde klassen zijn verouderde .NET Framework-technologieën uit het begin van de jaren 2000 waarmee toepassingen met gegevens in het geheugen kunnen werken terwijl de apps losgekoppeld zijn van de database. De technologieën zijn vooral handig voor apps waarmee gebruikers gegevens kunnen wijzigen en de wijzigingen weer kunnen behouden in de database. Hoewel gegevenssets een bewezen succesvolle technologie zijn, is de aanbevolen aanpak voor nieuwe .NET-toepassingen het gebruik van Entity Framework Core. Entity Framework biedt een natuurlijkere manier om met tabelgegevens te werken als objectmodellen en heeft een eenvoudigere programmeerinterface.
Het valideren van gegevens is het proces om te bevestigen dat de waarden die in gegevensobjecten worden ingevoerd, voldoen aan de beperkingen binnen het schema van een gegevensset. Het validatieproces bevestigt ook dat deze waarden de regels volgen die zijn vastgesteld voor uw toepassing. Het is een goed idee om gegevens te valideren voordat u updates naar de onderliggende database verzendt. Dit vermindert fouten en het potentiële aantal retouren tussen een toepassing en de database.
U kunt controleren of gegevens die naar een gegevensset worden geschreven, geldig zijn door validatiecontroles in de gegevensset zelf te bouwen. De gegevensset kan de gegevens controleren, ongeacht hoe de update wordt uitgevoerd, ongeacht of deze rechtstreeks door besturingselementen in een formulier, binnen een onderdeel of op een andere manier wordt uitgevoerd. Omdat de gegevensset deel uitmaakt van uw toepassing (in tegenstelling tot de back-end van de database), is het een logische plaats om toepassingsspecifieke validatie te bouwen.
De beste plek om validatie toe te voegen aan uw toepassing is in het gedeeltelijke klassebestand van de gegevensset. Open in Visual Basic of Visual C# de ontwerpfunctie voor gegevenssets en dubbelklik op de kolom of tabel waarvoor u validatie wilt maken. Met deze actie wordt het codebestand geopend, waarin u een ColumnChanging of RowChanging gebeurtenishandler kunt maken.
Gegevens valideren
Validatie binnen een gegevensset wordt op de volgende manieren uitgevoerd:
Door uw eigen toepassingsspecifieke validatie te maken waarmee waarden in een afzonderlijke gegevenskolom kunnen worden gecontroleerd tijdens wijzigingen. Zie Procedure: Gegevens valideren tijdens kolomwijzigingen voor meer informatie.
Door uw eigen toepassingsspecifieke validatie te maken waarmee gegevens naar waarden kunnen worden gecontroleerd terwijl een hele gegevensrij wordt gewijzigd. Zie Procedure: Gegevens valideren tijdens rijwijzigingen voor meer informatie.
Door sleutels, unieke beperkingen, enzovoort te maken als onderdeel van de werkelijke schemadefinitie van de gegevensset.
Door de eigenschappen van het DataColumn object in te stellen, zoals MaxLength, AllowDBNullen Unique.
Er worden verschillende gebeurtenissen gegenereerd door het DataTable object wanneer er een wijziging plaatsvindt in een record:
- De ColumnChanging- en ColumnChanged-gebeurtenissen worden gegenereerd tijdens en na elke wijziging in een afzonderlijke kolom. De ColumnChanging gebeurtenis is handig als u wijzigingen in specifieke kolommen wilt valideren. Informatie over de voorgestelde wijziging wordt in de gebeurtenis als argument meegegeven.
- De RowChanging en RowChanged gebeurtenissen treden op tijdens en na elke wijziging in een rij. De RowChanging gebeurtenis is algemener. Er wordt aangegeven dat er ergens in de rij een wijziging optreedt, maar u weet niet welke kolom is gewijzigd.
Bij elke wijziging in een kolom worden standaard vier gebeurtenissen gegenereerd. De eerste is de ColumnChanging en ColumnChanged gebeurtenissen voor de specifieke kolom die wordt gewijzigd. Hierna volgen de RowChanging en RowChanged gebeurtenissen. Als er meerdere wijzigingen in de rij worden aangebracht, worden de gebeurtenissen voor elke wijziging opgeroepen.
Opmerking
De methode van BeginEdit de gegevensrij schakelt de RowChanging en RowChanged gebeurtenissen uit nadat elke afzonderlijke kolom is gewijzigd. In dat geval wordt de gebeurtenis pas gegenereerd zodra de EndEdit-methode is aangeroepen, waarbij de RowChanging- en RowChanged-gebeurtenissen slechts eenmaal worden gegenereerd. Zie Beperkingen uitschakelen tijdens het invullen van een gegevensset voor meer informatie.
De gebeurtenis die u kiest, is afhankelijk van hoe gedetailleerd de validatie moet zijn. Als het belangrijk is dat u een fout onmiddellijk ondervangt wanneer een kolom wordt gewijzigd, maakt u validatie met behulp van de ColumnChanging gebeurtenis. Gebruik anders de RowChanging gebeurtenis, wat kan leiden tot het vangen van verschillende fouten tegelijk. Als uw gegevens zo zijn gestructureerd dat de waarde van de ene kolom wordt gevalideerd op basis van de inhoud van een andere kolom, voert u de validatie uit tijdens de RowChanging gebeurtenis.
Wanneer records worden bijgewerkt, genereert het DataTable object gebeurtenissen waarop u kunt reageren wanneer er wijzigingen optreden en nadat de wijzigingen zijn aangebracht.
Als uw toepassing gebruikmaakt van een getypte gegevensset, kunt u sterk getypte gebeurtenis-handlers maken. Hiermee worden vier extra getypte gebeurtenissen toegevoegd waarvoor u handlers kunt maken: dataTableNameRowChanging, dataTableNameRowChanged, dataTableNameRowDeletingen dataTableNameRowDeleted. Deze getypte gebeurtenis-handlers geven een argument door dat de kolomnamen van de tabel bevat, waardoor code gemakkelijker te schrijven en te lezen is.
Gegevensupdategebeurtenissen
| Gebeurtenis | Beschrijving |
|---|---|
| ColumnChanging | De waarde in een kolom wordt gewijzigd. De gebeurtenis geeft de rij en kolom aan u door, samen met de voorgestelde nieuwe waarde. |
| ColumnChanged | De waarde in een kolom is gewijzigd. De gebeurtenis geeft de rij en kolom aan u door, samen met de voorgestelde waarde. |
| RowChanging | De wijzigingen die zijn aangebracht in een DataRow object, worden teruggezet in de gegevensset. Als u de BeginEdit methode niet hebt aangeroepen, wordt de RowChanging gebeurtenis gegenereerd voor elke wijziging in een kolom direct nadat de ColumnChanging gebeurtenis is gegenereerd. Als u aanroept BeginEdit voordat u wijzigingen aanbrengt, wordt de RowChanging gebeurtenis alleen gegenereerd wanneer u de EndEdit methode aanroept. De gebeurtenis geeft de rij aan u door, samen met een waarde die aangeeft welk type actie (wijzigen, invoegen enzovoort) wordt uitgevoerd. |
| RowChanged | Er is een rij gewijzigd. De gebeurtenis geeft de rij aan u door, samen met een waarde die aangeeft welk type actie (wijzigen, invoegen enzovoort) wordt uitgevoerd. |
| RowDeleting | Er wordt een rij verwijderd. De gebeurtenis geeft de rij aan u door, samen met een waarde die aangeeft welk type actie (verwijderen) wordt uitgevoerd. |
| RowDeleted | Er is een rij verwijderd. De gebeurtenis geeft de rij aan u door, samen met een waarde die aangeeft welk type actie (verwijderen) wordt uitgevoerd. |
De ColumnChanging, RowChangingen RowDeleting gebeurtenissen worden gegenereerd tijdens het updateproces. U kunt deze gebeurtenissen gebruiken om gegevens te valideren of andere soorten verwerking uit te voeren. Omdat de update tijdens deze gebeurtenissen wordt verwerkt, kunt u deze annuleren door een uitzondering te genereren, waardoor de update niet kan worden afgerond.
De ColumnChanged, RowChanged en RowDeleted gebeurtenissen zijn meldingsgebeurtenissen die worden gegenereerd wanneer de update met succes is voltooid. Deze gebeurtenissen zijn handig als u verdere actie wilt ondernemen op basis van een geslaagde update.
Gegevens valideren tijdens kolomwijzigingen
Opmerking
De ontwerpfunctie voor gegevenssets maakt een gedeeltelijke klasse waarin validatielogica kan worden toegevoegd aan een gegevensset. De door de ontwerper gegenereerde gegevensset verwijdert of wijzigt geen code in de gedeeltelijke klasse.
U kunt gegevens valideren wanneer de waarde in een gegevenskolom verandert door te reageren op de ColumnChanging gebeurtenis. Wanneer deze gebeurtenis wordt gegenereerd, wordt een gebeurtenisargument (ProposedValue) doorgegeven dat de waarde bevat die wordt voorgesteld voor de huidige kolom. Op basis van de inhoud van e.ProposedValuekunt u het volgende doen:
Accepteer de voorgestelde waarde door niets te doen.
Negeer de voorgestelde waarde door de kolomfout (SetColumnError) in te stellen vanuit de kolomwijzigingsgebeurtenishandler.
U kunt eventueel een ErrorProvider controle gebruiken om een foutmelding aan de gebruiker te tonen. Zie het onderdeel ErrorProvider voor meer informatie.
Validatie kan ook worden uitgevoerd tijdens de RowChanging gebeurtenis.
Gegevens valideren tijdens rijwijzigingen
U kunt code schrijven om te controleren of elke kolom die u wilt valideren gegevens bevat die voldoen aan de vereisten van uw toepassing. Doe dit door de kolom in te stellen om aan te geven dat deze een fout bevat als een voorgestelde waarde onaanvaardbaar is. In de volgende voorbeelden wordt een kolomfout ingesteld wanneer de Quantity kolom 0 of minder is. De event handlers voor het wijzigen van rijen moeten lijken op de volgende voorbeelden.
Gegevens valideren wanneer een rij verandert (Visual Basic)
Open uw gegevensset in de Dataset Designer-. Zie Walkthrough: Een gegevensset maken in de ontwerpfunctie voor gegevenssets voor meer informatie.
Dubbelklik op de titelbalk van de tabel die u wilt valideren. Met deze actie wordt automatisch de RowChanging gebeurtenishandler van het DataTable gedeeltelijke klassebestand van de gegevensset gemaakt.
Aanbeveling
Dubbelklik links naast de tabelnaam om de evenementenhandler voor het wijzigen van rijen te maken. Als u dubbelklikt op de tabelnaam, kunt u deze bewerken.
Private Sub Order_DetailsDataTable_Order_DetailsRowChanging( ByVal sender As System.Object, ByVal e As Order_DetailsRowChangeEvent ) Handles Me.Order_DetailsRowChanging If CType(e.Row.Quantity, Short) <= 0 Then e.Row.SetColumnError("Quantity", "Quantity must be greater than 0") Else e.Row.SetColumnError("Quantity", "") End If End Sub
Gegevens valideren wanneer een rij verandert (C#)
Open uw gegevensset in de Dataset Designer-. Zie Walkthrough: Een gegevensset maken in de ontwerpfunctie voor gegevenssets voor meer informatie.
Dubbelklik op de titelbalk van de tabel die u wilt valideren. Met deze actie maakt u een gedeeltelijk klassebestand voor de DataTable.
Opmerking
De ontwerpfunctie voor gegevenssets maakt niet automatisch een gebeurtenis-handler voor de RowChanging gebeurtenis. U moet een methode maken om de RowChanging gebeurtenis af te handelen en code uit te voeren om de gebeurtenis in de initialisatiemethode van de tabel te koppelen.
Kopieer de volgende code naar de gedeeltelijke klasse:
public override void EndInit() { base.EndInit(); Order_DetailsRowChanging += TestRowChangeEvent; } public void TestRowChangeEvent(object sender, Order_DetailsRowChangeEvent e) { if ((short)e.Row.Quantity <= 0) { e.Row.SetColumnError("Quantity", "Quantity must be greater than 0"); } else { e.Row.SetColumnError("Quantity", ""); } }
Gewijzigde rijen ophalen
Elke rij in een gegevenstabel heeft een RowState eigenschap die de huidige status van die rij bijhoudt met behulp van de waarden in de DataRowState opsomming. U kunt gewijzigde rijen retourneren uit een gegevensset of gegevenstabel door de GetChanges methode van een DataSet of DataTableaan te roepen. U kunt controleren of er wijzigingen bestaan voordat u aanroept GetChanges door de HasChanges methode van een gegevensset aan te roepen.
Opmerking
Nadat u wijzigingen hebt doorgevoerd in een gegevensset of gegevenstabel (door de methode aan AcceptChanges te roepen), retourneert de GetChanges methode geen gegevens. Als uw toepassing gewijzigde rijen moet verwerken, moet u de wijzigingen verwerken voordat u de AcceptChanges methode aanroept.
Als u de GetChanges methode van een gegevensset of gegevenstabel aanroept, wordt een nieuwe gegevensset of gegevenstabel geretourneerd die alleen records bevat die zijn gewijzigd. Als u specifieke records wilt ophalen, bijvoorbeeld alleen nieuwe records of alleen gewijzigde records, kunt u een waarde uit de DataRowState opsomming doorgeven als parameter aan de GetChanges methode.
Gebruik de DataRowVersion opsomming om toegang te krijgen tot de verschillende versies van een rij (bijvoorbeeld de oorspronkelijke waarden die zich in een rij bevonden voordat deze werd verwerkt).
Alle gewijzigde records ophalen uit een gegevensset
Roep de GetChanges methode van een gegevensset aan.
In het volgende voorbeeld wordt een nieuwe gegevensset gemaakt die wordt aangeroepen
changedRecordsen gevuld met alle gewijzigde records uit een andere gegevensset met de naamdataSet1.
Alle gewijzigde records uit een gegevenstabel ophalen
Roep de GetChanges methode van een gegevenstabel aan.
In het volgende voorbeeld wordt een nieuwe gegevenstabel gemaakt die wordt aangeroepen
changedRecordsTableen gevuld met alle gewijzigde records uit een andere gegevenstabel met de naamdataTable1.
Om alle records met een specifieke rijstatus op te halen
Roep de
GetChangesmethode van een gegevensset of gegevenstabel aan en geef een DataRowState opsommingswaarde door als argument.In het volgende voorbeeld ziet u hoe u een nieuwe gegevensset met de naam
addedRecordsmaakt en deze alleen vult met records die zijn toegevoegd aan dedataSet1gegevensset.In het volgende voorbeeld ziet u hoe u alle records retourneert die onlangs aan de
Customerstabel zijn toegevoegd:
De oorspronkelijke versie van een DataRow openen
Wanneer er wijzigingen worden aangebracht in gegevensrijen, behoudt de gegevensset zowel de oorspronkelijke (Original) als de nieuwe (Current) versies van de rij. Voordat u de AcceptChanges methode aanroept, heeft uw toepassing bijvoorbeeld toegang tot de verschillende versies van een record (zoals gedefinieerd in de DataRowVersion opsomming) en verwerkt u de wijzigingen dienovereenkomstig.
Opmerking
Er bestaan alleen verschillende versies van een rij nadat deze is bewerkt en voordat de AcceptChanges methode is aangeroepen. Nadat de AcceptChanges methode is aangeroepen, zijn de huidige en oorspronkelijke versies hetzelfde.
Het doorgeven van de DataRowVersion waarde samen met de kolomindex (of kolomnaam als een tekenreeks) retourneert de waarde uit de specifieke rijversie van die kolom. De gewijzigde kolom wordt geïdentificeerd tijdens de ColumnChanging en ColumnChanged gebeurtenissen. Dit is een goed moment om de verschillende versies van rijen te inspecteren voor validatie. Als u echter tijdelijk beperkingen hebt opgeschort, worden deze gebeurtenissen niet gegenereerd en moet u programmatisch bepalen welke kolommen zijn gewijzigd. U kunt dit doen door de Columns verzameling te doorlopen en de verschillende DataRowVersion waarden te vergelijken.
De oorspronkelijke versie van een record ophalen
Krijg toegang tot de waarde van een kolom door de DataRowVersion van de rij op te geven die u wilt ophalen.
In het volgende voorbeeld ziet u hoe u een DataRowVersion waarde gebruikt om de oorspronkelijke waarde van een veld in een
CompanyNameDataRowveld op te halen:
Toegang tot de huidige versie van een DataRow
De huidige versie van een record ophalen
Open de waarde van een kolom en voeg vervolgens een parameter toe aan de index die aangeeft welke versie van een rij u wilt retourneren.
In het volgende voorbeeld ziet u hoe u een DataRowVersion waarde gebruikt om de huidige waarde van een
CompanyNameveld in een DataRowop te halen: