2

我在 DataSet 中有两个表,每个表的 ID 字段都相同。我有两个表之间的关系。如何在 C# 代码中从 Table2 中提取与 Table1 上的信息相关的信息?

我尝试使用新的 DataRow 并使用 GetChildRow 对其进行分配,但由于某种原因,我似乎无法使其工作。

另外,我知道这个问题可能没有那么丰富,请告诉我,我会尽力提供更多说明。

4

4 回答 4

1

如果您的 DataSet 是强类型的(即从 .xsd 文件生成),答案就不同了(而且容易得多)。我假设下面不是这种情况,但如果是说出来的话。

对于一般的 DataSet 对象,答案很大程度上取决于您开始掌握的内容。如果您只有一个 ID,那么在相关 DataTable 上的选择中使用该 ID 可能是最简单的。这适用于任何一个(或两个)表,因为它将返回包含您正在查找的信息的 DataRows 数组。

如果您有一个父 DataRow(您似乎有),那么使用的最佳方法取决于关系——即哪个是父级。如果 Table1 是您的父级并且您想要导航到相关的 Table2 子行,那么您正在寻找 GetChildRow (最好尽可能具体地告诉它要遵循哪个关系)。如果 Table2 是父级,并且您要从 Table1 DataRow 导航到 Table2 中的父级,您将需要使用 GetParentRow(同样,尽可能具体地识别关系 - 如果您方便,请使用关系对象)。

于 2009-01-07T23:27:49.100 回答
1

在强类型 DataSet 中,每个 DataRow 对象对于每个关系都有特定的方法或属性。如果您有一个父DataRow 并且想要导航到Table2 中的子项,它将是一个复数方法(即“row.GetTable2Rows()”)。如果您有一个孩子并且想要导航到父母,它将是一个单一的属性(“row.Table2Row”)。

于 2009-01-07T23:52:52.840 回答
0

所以这就是我所做的。让我知道如果或有更快的东西,这是否是最好的。我创建了一个与表 2 完全相同的新表,并编写了以下代码:

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

然后我可以调用记录为零的一张表并获得我需要的名称。它有效,但有没有更有效的方法?

于 2009-01-08T16:21:01.333 回答
0

对此回复的评论不够长,所以我将做出另一个答案:

无需使用新表。只需使用一组行对象并从那里开始。假设您的 DataSet 命名空间是“EventData”,我将把它分解一下,这样它就不会全部在一行上。

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

然后,您可以根据需要对“eventGroup”数组进行操作,包括使用 eventGroup[0] 获取第一个元素。

于 2009-01-08T22:17:35.887 回答