Obtenir les données de la Table2 à partir d'une relation avec la Table1 en code C #

StackOverflow https://stackoverflow.com/questions/422586

  •  05-07-2019
  •  | 
  •  

Question

J'ai deux tables dans un DataSet où le champ ID est le même. J'ai une relation entre les deux tables. Comment puis-je, dans le code C #, extraire les informations de Table2 relatives aux informations de Table1?

J'ai essayé d'utiliser un nouveau DataRow et de l'assigner à l'aide de GetChildRow, mais pour une raison quelconque, je n'arrive pas à le faire fonctionner.

De plus, je comprends que cette question n’est peut-être pas très informative, faites-le moi savoir et je tenterai de fournir des éclaircissements supplémentaires.

Était-ce utile?

La solution

La réponse est différente (et considérablement plus simple) si votre DataSet est fortement typé (c’est-à-dire généré à partir d’un fichier .xsd). Je suppose que ce n'est pas le cas ci-dessous, mais si c'est le cas.

Pour les objets DataSet génériques, la réponse dépend en grande partie de ce que vous avez pour commencer. Si vous avez simplement un identifiant, il est probablement plus simple d'utiliser l'identifiant dans une sélection du DataTable approprié. Cela fonctionnera pour l'une des tables (ou les deux) car il renverra un tableau de DataRows contenant les informations recherchées.

Si vous avez un DataRow parent (et cela semble probable), la meilleure méthode à utiliser dépend de la relation, c'est-à-dire. qui est le parent. Si Table1 est votre parent et que vous souhaitez naviguer vers les lignes enfant pertinentes de Table2, vous recherchez GetChildRow (il est préférable que vous soyez aussi précis que possible pour lui indiquer la relation à suivre). Si Table2 est le parent et que vous naviguez d'un DataRow Table1 vers le parent de Table2, vous souhaiterez utiliser GetParentRow (encore une fois, soyez aussi précis en identifiant la relation que vous pouvez # 8212; utilisez l'objet relation si vous avez c'est pratique).

Autres conseils

Dans un DataSet fortement typé, chaque objet DataRow aura des méthodes ou des propriétés spécifiques pour chaque relation. Si vous avez un DataRow parent et souhaitez naviguer vers les enfants de la Table2, il s'agira d'une méthode plurielle (par exemple, "row.GetTable2Rows ()"). Si vous avez un enfant et souhaitez accéder au parent, il s'agira d'une propriété singulière ("row.Table2Row").

Alors voici ce que j'ai fait. Faites-moi savoir si c'est mieux s'il y a quelque chose de plus rapide. J'ai créé une nouvelle table qui est une réplique exacte de la table 2 et j'ai écrit le code suivant:

currentDataSet.GroupTableOneRow.Clear();
currentDataSet.GroupAttendingEventTable[groupAttendingEventCounter].GetGroupTableRows().CopyToDataTable(currentDataSet.GroupTableOneRow, LoadOption.OverwriteChanges);

Ensuite, je peux appeler la table à l'enregistrement zéro et obtenir le nom dont j'ai besoin. Cela fonctionne, mais existe-t-il un moyen plus efficace?

Un commentaire n'était pas assez long pour cette réponse, je vais donc lui donner une autre réponse:

Il n'est pas nécessaire d'utiliser une nouvelle table. Il suffit d’utiliser un tableau d’objets en ligne et de partir de là Dites que votre espace de nom DataSet est " EventData " et je vais le décomposer un peu afin que tout ne soit pas sur une seule ligne.

// The parent row
EventData.GroupAttendingEventRow groupAttendingEvent = currentDataSet.GroupAttendingEventTable[groupAttendingEventCounter];
// an array of children rows
EventData.GroupTableRow[] eventGroup = groupAttendingEvent.GetGroupTableRows();

Ensuite, vous pouvez agir sur le " eventGroup " tableau que vous souhaitez, y compris le premier élément avec eventGroup [0].

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top