質問

DataSetには、それぞれのIDフィールドが同じである2つのテーブルがあります。 2つのテーブル間にリレーションがあります。 C#コードで、Table1の情報に関連するTable2から情報を取得するにはどうすればよいですか。

新しいDataRowを使用し、GetChildRowを使用してそれを割り当てようとしましたが、何らかの理由で動作させることができないようです。

また、この質問はそれほど有益ではないかもしれないことを理解しているので、お知らせください。より明確な説明を提供します。

役に立ちましたか?

解決

DataSetが厳密に型指定されている(つまり、.xsdファイルから生成されている)場合、答えは異なります(そして非常に簡単です)。以下ではそうではないと思いますが、もしそれが発言されれば。

汎用のDataSetオブジェクトの場合、答えは主に開始するものに依存します。単純にIDを持っている場合、関連するDataTableの選択でIDを使用するのがおそらく最も簡単です。これは、探している情報を含むDataRowsの配列を返すため、どちらか(または両方)のテーブルで機能します。

親のDataRowがある場合(そして、そうする可能性が高いと思われる場合)、使用する最適な方法は関係によって異なります&i.e.e。これが親です。 Table1が親であり、関連するTable2の子行にナビゲートする場合、GetChildRowを探しています(どのリレーションをフォローするかをできるだけ具体的に指定するのが最善です)。 Table2が親で、Table1のDataRowからTable2の親に移動している場合は、GetParentRowを使用する必要があります(繰り返しますが、できる限り特定の関係を特定する必要があります。便利です。

他のヒント

厳密に型指定されたDataSetでは、各DataRowオブジェクトに各関係の特定のメソッドまたはプロパティがあります。親DataRowがあり、Table2の子にナビゲートしたい場合、それは複数形のメソッドになります(つまり" row.GetTable2Rows()")。子があり、親に移動したい場合、それは単一のプロパティ(" row.Table2Row")になります。

だからここに私がやったことがあります。より速いものがある場合、またはそれがある場合、これが最善かどうかを教えてください。表2の正確なレプリカである新しいテーブルを作成し、次のコードを記述しました。

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

その後、レコード0の1つのテーブルを呼び出して、必要な名前を取得できます。動作しますが、より効率的な方法はありますか?

コメントはこの応答に十分な長さではなかったので、別の答えにします:

新しいテーブルを使用する必要はありません。行オブジェクトの配列を使用して、そこから移動します。 DataSet名前空間が" EventData"であるとします少し分解して、すべてが1行にならないようにします。

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

その後、" eventGroup"を操作できます。 eventGroup [0]を使用して最初の要素に到達することを含めて、配列に追加します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top