Delen via


Gegevens in gegevenssets bewerken met behulp van .NET Framework

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.

In dit artikel wordt beschreven hoe u gegevens in tabellen in .NET Framework-gegevenssets opvraagt en bewerkt. U kunt gegevens in gegevenstabellen bewerken, net zoals u de tabellen in elke database bewerkt. U kunt records in de tabel invoegen, bijwerken en verwijderen. In een gegevensgebonden formulier kunt u opgeven welke velden door de gebruiker kunnen worden bewerkt.

In dergelijke gevallen handelt de gegevensbindingsinfrastructuur het bijhouden van alle wijzigingen af, zodat de wijzigingen kunnen worden teruggestuurd naar de database. Als u gegevens programmatisch bewerkt en de wijzigingen naar de database wilt verzenden, moet u objecten en methoden gebruiken waarmee wijzigingen worden bijgehouden.

Naast het wijzigen van de werkelijke gegevens, kunt u ook een DataTable query uitvoeren om specifieke rijen met gegevens te retourneren. U kunt bijvoorbeeld query's uitvoeren op afzonderlijke rijen, oorspronkelijke of voorgestelde versies van rijen, rijen die zijn gewijzigd of rijen die fouten bevatten.

Vereiste voorwaarden

Als u Visual Studio wilt gebruiken om gegevens in .NET Framework-gegevenssets op te vragen en te bewerken, hebt u het volgende nodig:

Rijen in een gegevensset bewerken

Om een bestaande rij in een DataTable te bewerken, moet u de DataRow vinden die u wilt bewerken, en vervolgens de bijgewerkte waarden toewijzen aan de gewenste kolommen.

Als u de index van de rij die u wilt bewerken niet weet, gebruikt u de FindBy methode om te zoeken op de primaire sleutel.

NorthwindDataSet.CustomersRow customersRow = 
    northwindDataSet1.Customers.FindByCustomerID("ALFKI");

customersRow.CompanyName = "Updated Company Name";
customersRow.City = "Seattle";

Zodra u de rijindex kent, kunt u deze gebruiken om de rij te openen en te bewerken.

northwindDataSet1.Customers[4].CompanyName = "Updated Company Name";
northwindDataSet1.Customers[4].City = "Seattle";

Nieuwe rijen invoegen in een gegevensset

Toepassingen die gebruikmaken van gegevensgebonden besturingselementen voegen doorgaans nieuwe records toe met behulp van de knop Nieuwe toevoegen op een BindingNavigator-besturingselement.

U kunt ook een nieuwe record toevoegen aan een gegevensset door de NewRow methode op de DataTablegegevensset aan te roepen. Voeg vervolgens de rij toe aan de DataRow verzameling (Rows).

NorthwindDataSet.CustomersRow newCustomersRow = 
    northwindDataSet1.Customers.NewCustomersRow();

newCustomersRow.CustomerID = "ALFKI";
newCustomersRow.CompanyName = "Alfreds Futterkiste";

northwindDataSet1.Customers.Rows.Add(newCustomersRow);

Records verwijderen uit een gegevenstabel

U kunt een DataRow verwijderen door de methode van het RemoveDataRowCollectionobject aan te roepen of door de Delete methode van het DataRow object aan te roepen.

Met Remove de methode wordt de rij uit de verzameling verwijderd. Als uw toepassing geen updates naar een gegevensbron hoeft te verzenden, kunt u records verwijderen door rechtstreeks toegang te krijgen tot de gegevensrijverzameling met Remove.

Omgekeerd verwijdert de Delete methode de DataRow niet daadwerkelijk, maar markeert deze voor verwijdering. De daadwerkelijke verwijdering vindt plaats wanneer u methode aanroept AcceptChanges . U kunt programmatisch controleren welke rijen zijn gemarkeerd voor verwijdering voordat u ze daadwerkelijk verwijdert.

Als u de informatie wilt behouden die de gegevensset nodig heeft om updates naar de gegevensbron te sturen, gebruikt u de Delete methode om de DataRow van de gegevenstabel te verwijderen. Als uw toepassing gebruikmaakt van een TableAdapter of DataAdapter, verwijdert de Update methode rijen met een RowState van Deleted.

In het volgende voorbeeld ziet u hoe u de Delete methode aanroept om de eerste rij in de Customers tabel te markeren als verwijderd:

northwindDataSet1.Customers.Rows[0].Delete();

Opmerking

Als u de eigenschap Count van een DataRowCollectionkrijgt, bevat het resulterende aantal records die zijn gemarkeerd voor verwijdering. Als u een nauwkeurig aantal records wilt ophalen dat niet is gemarkeerd voor verwijdering, kunt u de verzameling doorlopen en de RowState eigenschap van elke record bekijken. Records die zijn gemarkeerd voor verwijdering, hebben een RowState van Deleted. U kunt ook een gegevensweergave maken van een gegevensset die filtert op basis van de status van de rijen en de Count-eigenschap ophalen.

Bepalen of er gewijzigde rijen zijn

Wanneer u wijzigingen aanbrengt in records in een gegevensset, wordt informatie over deze wijzigingen opgeslagen totdat u ze doorvoert. U voert de wijzigingen door wanneer u de AcceptChanges methode van een gegevensset of gegevenstabel aanroept, of wanneer u de Update methode van een TableAdapter of gegevensadapter aanroept.

Wijzigingen worden op twee manieren bijgehouden in elke gegevensrij:

  • Elke gegevensrij bevat informatie gerelateerd aan RowState, bijvoorbeeld Added, Modified, Deleted of Unchanged.

  • Elke gewijzigde gegevensrij bevat meerdere versies. De DataRowVersion versie bevat de oorspronkelijke versie vóór wijzigingen en de huidige versie na wijzigingen. Hoewel een wijziging in behandeling is en u kunt reageren op de RowChanging gebeurtenis, is er ook een derde voorgestelde versie beschikbaar.

Als u wilt controleren op gewijzigde rijen, roept u de HasChanges methode van een gegevensset aan. De methode retourneert true of er wijzigingen zijn aangebracht in de gegevensset. Nadat u hebt vastgesteld dat er wijzigingen bestaan, kunt u de GetChanges methode van een DataSet aanroepen of DataTable een set gewijzigde rijen retourneren.

In het volgende voorbeeld ziet u hoe u de retourwaarde van de HasChanges methode controleert om te detecteren of er gewijzigde rijen in NorthwindDataset1zijn.

if (northwindDataSet1.HasChanges()) 
{
    // Changed rows were detected, add appropriate code.
}
else
{
    // No changed rows were detected, add appropriate code.
}

Het type wijzigingen bepalen

U kunt controleren welk type wijzigingen zijn aangebracht in een gegevensset door een waarde van de DataRowState opsomming door te geven aan de HasChanges methode.

In het volgende voorbeeld ziet u hoe u de NorthwindDataset1 gegevensset controleert om te bepalen of er nieuwe rijen zijn toegevoegd.

if (northwindDataSet1.HasChanges(DataRowState.Added)) 
{
    // New rows have been added to the dataset, add appropriate code.
}
else
{
    // No new rows have been added to the dataset, add appropriate code.
}

Lokaliseer rijen met fouten

Wanneer u met afzonderlijke kolommen en rijen met gegevens werkt, kunnen er fouten optreden. U kunt de HasErrors eigenschap controleren om te bepalen of er fouten in een DataSet, DataTable, of DataRow.

Als de HasErrors eigenschap voor de gegevensset true is, doorloopt u de verzamelingen van tabellen en vervolgens de rijen om de rijen met fouten te vinden.

private void FindErrors() 
{
    if (dataSet1.HasErrors)
    {
        foreach (DataTable table in dataSet1.Tables)
        {
            if (table.HasErrors)
            {
                foreach (DataRow row in table.Rows)
                {
                    if (row.HasErrors)
                    {
                        // Process error here.
                    }
                }
            }
        }
    }
}