Pregunta

Tengo dos tablas en un DataSet donde el campo de ID en cada una es el mismo. Tengo una relación entre las dos tablas. ¿Cómo puedo, en el código C #, extraer la información de Table2 que se relaciona con la información en Table1?

He intentado usar una nueva DataRow y asignarla usando GetChildRow, pero por alguna razón parece que no puedo hacer que funcione.

Además, entiendo que esta pregunta puede no ser tan informativa, hágamelo saber y trataré de proporcionar más aclaraciones.

¿Fue útil?

Solución

La respuesta es diferente (y mucho más fácil) si su DataSet está fuertemente tipado (es decir, generado a partir de un archivo .xsd). Asumiré que ese no es el caso a continuación, pero si se trata de hablar.

Para los objetos genéricos de DataSet, la respuesta depende en gran medida de lo que usted tiene para comenzar. Si simplemente tiene una ID, es probable que sea más sencillo utilizar la ID en una selección en el DataTable relevante. Esto funcionará para cualquiera (o ambas) tablas, ya que devolverá una matriz de DataRows con la información que está buscando.

Si tiene un DataRow principal (y parece probable que lo tenga), entonces el mejor método para usar depende de la relación, es decir, cual es el padre Si Table1 es su principal y desea navegar a las filas secundarias relevantes de Table2, está buscando GetChildRow (lo mejor es ser lo más específico posible para decirle qué relación seguir). Si Table2 es el padre y está navegando desde Table1 DataRow al padre en Table2, querrá usar GetParentRow (nuevamente, sea tan específico para identificar la relación como pueda; use el objeto de la relación si lo tiene a mano ).

Otros consejos

En un DataSet fuertemente tipado, cada objeto DataRow tendrá métodos o propiedades específicos para cada relación. Si tiene un DataRow principal y desea navegar a los secundarios en la Tabla 2, será un método pluralizado (es decir, " row.GetTable2Rows () "). Si tiene un hijo y desea navegar hacia el padre, será una propiedad singular (" row.Table2Row ").

Así que aquí está lo que hice. Déjame saber si esto es mejor si o hay algo más rápido. Creé una nueva tabla que es una réplica exacta de la Tabla 2 y escribí este código:

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

Luego puedo llamar a la única tabla en el registro cero y obtener el nombre que necesito. Funciona, pero ¿hay una manera más eficiente?

Un comentario no fue lo suficientemente largo para esta respuesta, así que haré otra respuesta:

No hay necesidad de usar una nueva tabla. Solo usa una matriz de objetos de fila y ve desde allí. Supongamos que el espacio de nombres de DataSet es " EventData " y lo desglosaré un poco para que no esté todo en una línea.

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

Entonces puedes actuar en el " eventGroup " como desee, incluido el primer elemento con eventGroup [0].

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top