Domanda

Ho due tabelle in un DataSet in cui il campo ID su ciascuno è lo stesso. Ho una relazione tra le due tabelle. Come posso, nel codice C #, estrarre le informazioni da Table2 che si riferiscono alle informazioni su Table1?

Ho provato a usare un nuovo DataRow e assegnarlo usando GetChildRow, ma per qualche motivo non riesco a farlo funzionare.

Inoltre, capisco che questa domanda potrebbe non essere così istruttiva, fammi sapere e cercherò di fornire ulteriori chiarimenti.

È stato utile?

Soluzione

La risposta è diversa (e significativamente più semplice) se il tuo DataSet è fortemente tipizzato (cioè generato da un file .xsd). Presumo che non sia il caso seguente, ma se si parla.

Per gli oggetti DataSet generici, la risposta dipende in gran parte da ciò che si possiede per iniziare. Se si dispone semplicemente di un ID, è probabilmente più semplice utilizzare l'ID in una selezione nella DataTable pertinente. Funzionerà con una (o entrambe) le tabelle poiché restituirà una matrice di DataRows con le informazioni che stai cercando.

Se hai un DataRow padre (e sembra probabile che tu lo faccia), il metodo migliore da utilizzare dipende dalla relazione & # 8212; vale a dire. che è il genitore. Se Table1 è il tuo genitore e desideri passare alle righe figlio pertinenti di Table2, stai cercando GetChildRow (è meglio essere il più specifici possibile nel dirgli quale relazione seguire). Se Table2 è il genitore e stai navigando da un DataRow di Table1 al genitore in Table2, ti consigliamo di utilizzare GetParentRow (di nuovo, sii più specifico nell'identificare la relazione che puoi & # 8212; usa l'oggetto relazione se hai a portata di mano).

Altri suggerimenti

In un DataSet fortemente tipizzato, ogni oggetto DataRow avrà metodi o proprietà specifici per ogni relazione. Se si dispone di un DataRow padre e si desidera passare ai figli nella Tabella 2, sarà un metodo pluralizzato (ovvero "row.GetTable2Rows ()"). Se hai un figlio e desideri passare al genitore, sarà una proprietà singolare (" row.Table2Row ").

Quindi ecco cosa ho fatto. Fammi sapere se è meglio se o c'è qualcosa di più veloce. Ho creato una nuova tabella che è una replica esatta della tabella 2 e ho scritto questo codice:

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

Quindi posso chiamare una tabella al record zero e ottenere il nome di cui ho bisogno. Funziona, ma esiste un modo più efficace?

Un commento non è stato abbastanza lungo per questa risposta, quindi farò un'altra risposta:

Non è necessario utilizzare una nuova tabella. Basta usare una matrice di oggetti riga e andare da lì. Supponiamo che il tuo spazio dei nomi DataSet sia " EventData " e lo spezzerò un po 'in modo che non sia tutto su una riga.

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

Quindi puoi agire sul " eventGroup " come desideri, includendo arrivare al primo elemento con eventGroup [0].

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top