Modifier des données dans des datasetsEdit data in datasets

Pour modifier les données dans les tables de données de la même manière que vous modifiez les données dans une table dans une base de données.You edit data in data tables much like you edit the data in a table in any database. Le processus peut inclure insertion, la mise à jour et suppression d’enregistrements dans la table.The process can include inserting, updating, and deleting records in the table. Dans un formulaire lié aux données, vous pouvez spécifier quels champs sont modifiables par l’utilisateur.In a data-bound form, you can specify which fields are user-editable. Dans ce cas, l’infrastructure de liaison de données gère tout le suivi des modifications afin que les modifications puissent être envoyées à la base de données plus tard.In those cases, the data-binding infrastructure handles all the change tracking so that the changes can be sent back to the database later. Si vous apportez des modifications par programme aux données, et que vous avez l’intention de renvoyer ces modifications à la base de données, vous devez utiliser les objets et les méthodes qui effectuent le suivi des modifications pour vous.If you programmatically make edits to data, and you intend to send those changes back to the database, you must use the objects and methods that do the change tracking for you.

Outre la modification des données réelles, vous pouvez également interroger un DataTable pour retourner les lignes de données spécifiques.In addition to changing the actual data, you can also query a DataTable to return specific rows of data. Par exemple, vous est possible d’interroger pour des lignes individuelles, des versions spécifiques de lignes (d’origine et proposés), les lignes qui ont été modifiés ou les lignes qui contiennent des erreurs.For example, you might query for individual rows, specific versions of rows (original and proposed), rows that have changed, or rows that have errors.

Pour modifier les lignes dans un jeu de donnéesTo edit rows in a dataset

Pour modifier une ligne existante dans un DataTable, vous devez localiser la DataRow vous souhaitez modifier, puis assigner les valeurs mises à jour pour les colonnes de votre choix.To edit an existing row in a DataTable, you need to locate the DataRow you want to edit, and then assign the updated values to the desired columns.

Si vous ne connaissez pas l’index de la ligne que vous souhaitez modifier, utilisez le FindBy méthode de recherche par la clé primaire :If you don't know the index of the row you want to edit, use the FindBy method to search by the primary key:

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

customersRow.CompanyName = "Updated Company Name";
customersRow.City = "Seattle";;
Dim customersRow As NorthwindDataSet.CustomersRow
customersRow = NorthwindDataSet1.Customers.FindByCustomerID("ALFKI")

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

Si vous connaissez l’index de ligne, vous pouvez accéder à et modifie les lignes comme suit :If you know the row index, you can access and edits rows as follows:

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

Pour insérer de nouvelles lignes dans un jeu de donnéesTo insert new rows into a dataset

Les applications qui utilisent des contrôles liés aux données généralement ajoutent de nouveaux enregistrements via le Ajouter nouveau bouton sur un contrôle BindingNavigator.Applications that use data-bound controls typically add new records through the Add New button on a BindingNavigator control.

Pour ajouter manuellement des enregistrements à un jeu de données, créez une nouvelle ligne de données en appelant la méthode sur la table de données.To manually add new records to a dataset, create a new data row by calling the method on the DataTable. Ensuite, ajoutez la ligne à la DataRow collection (Rows) de la DataTable:Then, add the row to the DataRow collection (Rows) of the DataTable:

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

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

northwindDataSet1.Customers.Rows.Add(newCustomersRow);
Dim newCustomersRow As NorthwindDataSet.CustomersRow
newCustomersRow = NorthwindDataSet1.Customers.NewCustomersRow()

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

NorthwindDataSet1.Customers.Rows.Add(newCustomersRow)

Pour conserver les informations que le jeu de données a besoin envoyer des mises à jour à la source de données, utilisez la Delete méthode pour supprimer des lignes dans une table de données.In order to retain the information that the dataset needs to send updates to the data source, use the Delete method to remove rows in a data table. Par exemple, si votre application utilise un TableAdapter (ou DataAdapter), le TableAdapter Update méthode supprime des lignes dans la base de données qui ont un RowState de Deleted.For example, if your application uses a TableAdapter (or DataAdapter), the TableAdapter's Update method deletes rows in the database that have a RowState of Deleted.

Si votre application n’a pas besoin envoyer des mises à jour à la source de données, il est possible de supprimer des enregistrements en accédant directement à la collection de lignes de données (Remove).If your application does not need to send updates back to a data source, it's possible to remove records by directly accessing the data row collection (Remove).

Pour supprimer des enregistrements à partir d’une table de donnéesTo delete records from a data table

  • Appelez le Delete méthode d’un DataRow.Call the Delete method of a DataRow.

    Cette méthode ne supprime pas physiquement l’enregistrement.This method doesn't physically remove the record. Au lieu de cela, il les marque pour suppression.Instead, it marks the record for deletion.

    Note

    Si vous obtenez la propriété count d’un DataRowCollection, le résultat inclut les enregistrements qui ont été marqués pour suppression.If you get the count property of a DataRowCollection, the resulting count includes records that have been marked for deletion. Pour obtenir un décompte précis d’enregistrements qui ne sont pas marqués pour suppression, vous pouvez parcourir la collection et rechercher la RowState propriété de chaque enregistrement.To get an accurate count of records that aren't marked for deletion, you can loop through the collection looking at the RowState property of each record. (Les enregistrements marqués pour suppression ont un RowState de Deleted.) Vous pouvez également créer une vue de données d’un dataset filtres basés sur l’état de la ligne et obtenir la propriété count à partir de là.(Records marked for deletion have a RowState of Deleted.) Alternatively, you can create a data view of a dataset that filters based on row state and get the count property from there.

L’exemple suivant montre comment appeler le Delete méthode pour marquer la première ligne dans le Customers comme étant supprimé de la table :The following example shows how to call the Delete method to mark the first row in the Customers table as deleted:

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

Déterminer s’il existe des lignes modifiéesDetermine if there are changed rows

Lorsque des modifications sont apportées aux enregistrements dans un jeu de données, les informations relatives à ces modifications sont stockées jusqu'à ce que vous les validiez.When changes are made to records in a dataset, information about those changes is stored until you commit them. Vous validez les modifications lorsque vous appelez le AcceptChanges (méthode) d’une table de données ou le jeu de données, ou lorsque vous appelez le Update méthode d’un adaptateur de données ou du TableAdapter.You commit the changes when you call the AcceptChanges method of a dataset or data table, or when you call the Update method of a TableAdapter or data adapter.

Modifications sont suivies de deux façons dans chaque ligne de données :Changes are tracked two ways in each data row:

  • Chaque ligne de données contient des informations relatives à son RowState (par exemple, Added, Modified, Deleted, ou Unchanged).Each data row contains information related to its RowState (for example, Added, Modified, Deleted, or Unchanged).

  • Chaque ligne de données modifiée contient plusieurs versions de cette ligne (DataRowVersion), la version d’origine (avant modification) et la version actuelle (après les modifications).Each changed data row contains multiple versions of that row (DataRowVersion), the original version (before changes) and the current version (after changes). Pendant la période quand une modification est en attente (le temps lorsque vous pouvez répondre à la RowChanging événement), une troisième version — la version proposée — est également disponible.During the period when a change is pending (the time when you can respond to the RowChanging event), a third version — the proposed version— is available as well.

Le HasChanges retourne de la méthode d’un dataset true si les modifications ont été apportées dans le jeu de données.The HasChanges method of a dataset returns true if changes have been made in the dataset. Après avoir déterminé qu’il existe des lignes modifiées, vous pouvez appeler la GetChanges méthode d’un DataSet ou DataTable pour retourner un jeu de lignes modifiées.After determining that changed rows exist, you can call the GetChanges method of a DataSet or DataTable to return a set of changed rows.

Pour déterminer si des modifications ont été apportées aux lignesTo determine if changes have been made to any rows

  • Appelez le HasChanges méthode d’un dataset pour vérifier les lignes modifiées.Call the HasChanges method of a dataset to check for changed rows.

L’exemple suivant montre comment vérifier la valeur de retour à partir de la HasChanges méthode pour détecter s’il existe des lignes modifiées dans un dataset nommé NorthwindDataset1:The following example shows how to check the return value from the HasChanges method to detect whether there are any changed rows in a dataset named NorthwindDataset1:

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

    ' Changed rows were detected, add appropriate code.
Else
    ' No changed rows were detected, add appropriate code. 
End If

Déterminer le type de modificationsDetermine the type of changes

Vous pouvez également vérifier pour voir quel type de modifications ont été apportées dans un jeu de données en transmettant une valeur à partir de la DataRowState énumération à la HasChanges (méthode).You can also check to see what type of changes were made in a dataset by passing a value from the DataRowState enumeration to the HasChanges method.

Pour déterminer le type de modifications ont été apportées à une ligneTo determine what type of changes have been made to a row

L’exemple suivant montre comment vérifier un dataset nommé NorthwindDataset1 pour déterminer si toutes les nouvelles lignes ont été ajoutés à celui-ci :The following example shows how to check a dataset named NorthwindDataset1 to determine if any new rows have been added to it:

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.
}
If NorthwindDataSet1.HasChanges(DataRowState.Added) Then

    ' New rows have been added to the dataset, add appropriate code.
Else
    ' No new rows have been added to the dataset, add appropriate code.
End If

Pour rechercher des lignes qui contiennent des erreursTo locate rows that have errors

Lorsque vous travaillez avec des colonnes et des lignes de données, vous pouvez rencontrer des erreurs.When working with individual columns and rows of data, you might encounter errors. Vous pouvez vérifier le HasErrors propriété afin de déterminer si des erreurs existent dans un DataSet, DataTable, ou DataRow.You can check the HasErrors property to determine if errors exist in a DataSet, DataTable, or DataRow.

  1. Vérifier le HasErrors propriété pour voir s’il existe des erreurs dans le jeu de données.Check the HasErrors property to see if there are any errors in the dataset.

  2. Si le HasErrors propriété est true, effectuer une itération dans les collections de tables, puis le via les lignes, pour rechercher la ligne avec l’erreur.If the HasErrors property is true, iterate through the collections of tables, and then the through the rows, to find the row with the error.

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.
                    }
                }
            }
        }
    }
}
Private Sub FindErrors()
    Dim table As Data.DataTable
    Dim row As Data.DataRow

    If DataSet1.HasErrors Then

        For Each table In DataSet1.Tables
            If table.HasErrors Then

                For Each row In table.Rows
                    If row.HasErrors Then

                        ' Process error here.
                    End If
                Next
            End If
        Next
    End If
End Sub

Voir aussiSee also