maestro detalle datagrids - tabcontrol

07/12/2005 - 04:10 por Pablo | Informe spam
Hola Gente,

tengo el siguiente problema :
Necesito construir en un winform una estructura maestro detalle.
Tengo un tabcontrol con dos tabs, cada uno con un datagrid.

Me pueden orientar en cual seria la forma mas eficaz de relacionar
los dos datagrid de manera que se comporten uno como maestro y el otro
como detalle. La idea seria que al hacer click en una fila del primer
datagrid en el primer tab se actualize el datagrid del segundo tab segun
una relacion dada por una sentencia sql del tipo

select * from tabla_detalle
where clave=clave_maestra

y que el datagrid se actualize al momento de hacer click en la primera,
ya sea con el evento click o el mousedown.

Ya estuve tratando con datarelation pero no me resultaron, el asunto es que
este ejemplo es de muestra nomas porque en realidad la relacion es un padre
con varios hijos y algunos hijos con nietos, y con datarelation no lo pude
implementar.

saludos,
y gracias por adelantado
 

Leer las respuestas

#1 SoftJaén
07/12/2005 - 19:50 | Informe spam
"Pablo" preguntó:

Me pueden orientar en cual seria la forma mas eficaz de relacionar
los dos datagrid de manera que se comporten uno como maestro y el otro
como detalle.



Hola, Pablo:

Para construir un formulario maestro/detalle, básicamente los pasos serían
los siguientes:

1. Declarar a nivel del formulario un objeto DataSet:

Private ds As New DataSet

2. En un procedimiento cualquiera, establecer una conexión con el origen de
datos, utilizando el proveedor .net adecuado, en el ejemplo, el proveedor
.net para Microsoft Access:

Dim cnn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Mis documentos\Bd1.mdb")

cnn.Open()

3. Crear un adaptador de datos para la tabla Maestro:

Dim daMaestro As New OleDbDataAdapter(ConsultaSQL, cnn)

4. Rellenar el objeto DataSet con los datos de la tabla Maestro:

daMaestro.Fill(ds, "TablaMaestro")

5. Crear un segundo adaptador de datos para la tabla Detalle:

Dim daDetalle As New OleDbDataAdapter(ConsultaSQL, cnn)

6. Rellenar el objeto DataSet con los datos de la tabla Detalle:

daDetalle.Fill(ds, "TablaDetalle")

7. Crear una relación entre ambas tablas:

ds.Relations.Add("NombreRelacion", _
ds.Tables("TablaMaestro").Columns("CampoRelacion"), _
ds.Tables("TablaDetalle").Columns("CampoRelacion"))

8. Enlazar los distintos DataGrid con el objeto DataSet:

DataGrid1.DataSource = ds
DataGrid1.DataMember = "TablaMaestro"
DataGrid1.AllowNavigation = False

DataGrid2.DataSource = ds
DataGrid2.DataMember = "TablaMaestro.NombreRelacion"

9. Cerrar la conexión:

cnn.Close()

Eso es todo. Cada vez que selecciones un registro en el control DataGrid
"maestro", te aparecerán los registros relacionados en el control DataGrid
"detalle". Adapta el código a tus necesidades.

Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.

Preguntas similares