Vous ne serez pas en mesure de le faire automatiquement; Les fonctionnalités de numérotation automatique intégrées dans ADO.NET sont toutes limitées à la table individuelle. Donc, étant donné que vous allez devoir coder votre propre méthode pour gérer cela, quelle est la meilleure façon? Si vous utilisiez une base de données, je vous suggère d'utiliser une quatrième table, de faire de la colonne ID des trois tables principales une clé étrangère dans laquelle vous avez stocké l'ID de la quatrième table et de synchroniser l'insertion d'une ligne dans le quatrième table avec l'insertion d'une rangée dans l'un des trois autres. Quelque chose comme:
INSERT INTO Sequence (DateInserted) VALUES (GETDATE())
INSERT INTO TableA (SequenceID, ...) VALUES (@@SCOPE_IDENTITY(), ...)
Mais vous ne voulez pas utiliser une base de données, ce qui me porte à croire que vous ne se soucient pas vraiment de la persistance de ces numéros d'identification.Si elles vraiment besoin d'exister pendant que votre application est en cours d'exécution, vous pouvez simplement utiliser un champ statique pour stocker le dernier ID utilisé, et faire une classe d'aide:
public static class SequenceHelper
{
private static int ID;
private static object LockObject = new object();
public static int GetNextID()
{
lock (LockObject)
{
return ID++;
}
}
}
Le verrouillage est pas strictement nécessaire, mais il y a pas de mal à faire ce code thread-safe.
Ensuite, vous pouvez gérer l'événement TableNewRow
sur chacun de vos trois tableaux de données, par exemple:
DataTable t = MyDataSet["TableA"];
t.TableNewRow += new delegate(object sender, DataTableNewRowEventArgs e)
{
r.Row["ID"] = SequenceHelper.GetNextID();
};
Cela garantira que toute méthode ajoute une nouvelle ligne à chaque table - que ce soit votre code d'appel NewRow()
ou nouvelle ligne ajoutée via un contrôle lié aux données - chaque ligne ajoutée aura sa colonne d'identification définie sur l'ID suivant.