Получить данные таблицы 2 из отношения к таблице 1 в коде C # - PullRequest
2 голосов
/ 08 января 2009

У меня есть две таблицы в наборе данных, где поле идентификатора в каждой совпадает. У меня есть связь между двумя таблицами. Как в коде C # получить информацию из таблицы 2, которая относится к информации в таблице 1?

Я попытался использовать новый DataRow и назначить его с помощью GetChildRow, но по какой-то причине я не могу заставить его работать.

Кроме того, я понимаю, что этот вопрос может быть не столь информативным, дайте мне знать, и я постараюсь дать больше разъяснений.

Ответы [ 4 ]

1 голос
/ 08 января 2009

В строго типизированном DataSet каждый объект DataRow будет иметь определенные методы или свойства для каждого отношения. Если у вас есть родительский DataRow и вы хотите перейти к дочерним элементам в Table2, это будет множественный метод (т. Е. "Row.GetTable2Rows ()"). Если у вас есть ребенок и вы хотите перейти к родителю, это будет единственное свойство ("row.Table2Row").

1 голос
/ 08 января 2009

Ответ будет другим (и значительно проще), если ваш DataSet строго типизирован (то есть сгенерирован из файла .xsd). Я предполагаю, что это не тот случай, но если это произнесено.

Для универсальных объектов DataSet ответ во многом зависит от того, что у вас есть, чтобы начать. Если у вас есть просто идентификатор, то, вероятно, проще всего использовать этот идентификатор в элементе выбора соответствующей таблицы данных. Это будет работать для любой (или обеих) таблиц, поскольку будет возвращать массив DataRows с информацией, которую вы ищете.

Если у вас есть родительский DataRow (и кажется, что он у вас есть), то лучший метод для использования зависит от отношения & mdash; т.е. который является родителем. Если Table1 является вашим родителем, и вы хотите перейти к соответствующим дочерним строкам Table2, вы ищете GetChildRow (лучше всего указать, какое отношение следует соблюдать). Если Table2 является родителем, и вы переходите от DataRow Table1 к родительскому элементу в Table2, вам нужно использовать GetParentRow (опять же, будьте настолько конкретны при определении отношения, насколько это возможно - & mdash; используйте объект отношения, если он у вас есть под рукой). ).

0 голосов
/ 09 января 2009

Комментарий не был достаточно длинным для этого ответа, поэтому я сделаю еще один ответ:

Нет необходимости использовать новую таблицу. Просто используйте массив объектов строк и идите оттуда. Скажем, ваше пространство имен DataSet - «EventData», и я его немного разбью, чтобы не все в одной строке.

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

Затем вы можете работать с массивом "eventGroup" так, как вам хотелось бы, включая получение первого элемента с помощью eventGroup [0].

0 голосов
/ 08 января 2009

Итак, вот что я сделал. Дайте мне знать, если это лучше, если или есть что-то быстрее. Я создал новую таблицу, которая является точной копией таблицы 2, и написал этот код:

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

Тогда я могу вызвать одну таблицу в нулевой записи и получить имя, которое мне нужно. Это работает, но есть ли более эффективный способ?

...