Pergunta

Eu tenho duas tabelas em um DataSet onde o campo ID de cada um é o mesmo. Eu tenho uma relação entre as duas tabelas. Como eu, em código C #, puxe a informação de Table2 que diz respeito às informações na tabela 1?

Eu tentei usar um novo DataRow e atribuindo-lo usando GetChildRow, mas por algum motivo eu não consigo fazê-lo funcionar.

Além disso, eu entendo essa questão pode não ser tão informativo, deixe-me saber e eu vou tentar fornecer mais esclarecimentos.

Foi útil?

Solução

A resposta é diferente (e significativamente mais fácil) se o seu DataSet é fortemente tipado (ou seja gerada a partir de um arquivo .xsd). Eu vou assumir que não é o caso abaixo, mas se for falar.

Para DataSet objetos genéricos, a resposta depende em grande medida o que você tem a preensão de começar. Se você tiver apenas um ID, então provavelmente é mais simples de usar o ID em um seleto na DataTable relevante. Isto irá funcionar para um (ou ambos) mesas como ele irá retornar um array de DataRows com a informação que você está procurando.

Se você tem um DataRow pai (e parece provável que você faz), então o melhor método a utilizar depende da relação-i. que é o progenitor. Se Table1 é o seu pai e você deseja navegar filho linhas relevantes Quadro2 Médias, você está procurando GetChildRow (melhor para ser o mais específico possível em dizer que que a relação a seguir). Se Table2 é o pai e você está navegando a partir de uma tabela 1 DataRow para o pai no Table2, você vai querer usar GetParentRow (mais uma vez, ser tão específico na identificação da relação como você pode usar o objeto-relação se você tê-lo acessível ).

Outras dicas

num conjunto de dados de rigidez, cada objecto de DataRow terá métodos ou propriedades específicas para cada relacionamento. Se você tem um DataRow pai e quer navegar para crianças em Table2, será um método pluralizado (isto é, "row.GetTable2Rows ()"). Se você tem um filho e deseja navegar para o pai, será uma propriedade singular ( "row.Table2Row").

Então aqui está o que eu fiz. Deixe-me saber se isso é melhor se ou há algo mais rápido. Eu criei uma nova tabela que é uma réplica exata da Tabela 2 e escreveu este código:

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

Então eu posso chamar a uma mesa ao registro zero e começar a necessidade nome que eu. Ele funciona, mas há uma maneira mais eficiente?

Um comentário não foi suficientemente longo para esta resposta, então eu vou fazer isso outra resposta:

Não há necessidade de usar uma nova tabela. Basta usar uma matriz de objetos de linha e de lá ir. Digamos que seu namespace DataSet é "EventData" e eu vou quebrá-lo um pouco para baixo por isso não é tudo na mesma linha.

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

Em seguida, você pode agir sobre a matriz "eventGroup" como você gostaria inclusive recebendo no primeiro elemento com eventGroup [0].

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top