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

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

此外,我理解这个问题可能不是那么有用,请告诉我,我会尽力提供更多说明。

有帮助吗?

解决方案

如果您的DataSet是强类型的(即从.xsd文件生成),答案会有所不同(并且更加容易)。我假设下面的情况并非如此,但是如果它说出来的话。

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

如果您有父DataRow(并且您可能会这样做),那么最好的使用方法取决于关系—即。这是父母。如果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);

然后我可以在记录零处调用一个表并获取我需要的名称。它有效,但是有更好的方法吗?

评论的时间不够长,所以我会另外回答:

无需使用新表。只需使用行对象数组并从那里开始。假设您的DataSet名称空间是“EventData”。而且我会把它分解一下所以它不是全部都在一条线上。

// 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