Maestro - Detalle
Clientes - Órdenes  usando Northwind

Fecha: 13/May/2005 (06 de Mayo de 2005)
Autor: Ing. Fernando Luque Sánchez   -  Trujillo - Perú 
fls2307@hotmail.com  -   
fernandoluque2307@yahoo.com
fluque@infonegocio.net.pe


Sres. Desarrolladores, en esta oportunidad les envío un pequeño pero útil ejemplo de como utilizar un DataView en una consulta Maestro (la tabla Customers) y obtener las órdenes del Cliente seleccionado (de la tabla Orders), los clientes son cargados en un ComboBox y luego de seleccionar uno de ellos se pueden visualizar sus órdenes.

A continuación sigue código en Visual Basic, nótese que la Region generada por Windows Forms ha sido eliminada para mostrar únicamente lo que se desea:

Se ha insertado desde el IDE los objetos SQLConnection, SQLDataAdapter y se ha generado el DataSet.

 'Maestro - Detalle sencillo
'Ing. Fernando Luque Sánchez
'Trujillo - Perú

Imports System.Data
Imports System.Data.SqlClient

Public Class frmPrincipal
    Inherits System.Windows.Forms.Form

    'Vista para el filtrado de Datos
    Dim dvOrdenes As DataView

    Private Sub CargarForm(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load

        'Llenar los DataTables con los datos
        daClientes.Fill(dsDatos, "Clientes")

        daOrdenes.Fill(dsDatos, "Ordenes")

        'Origen del ComboBox

        cboClientes.DataSource = dsDatos.Tables("Clientes")

        cboClientes.DisplayMember = dsDatos.Tables("Clientes").Columns(1).ToString

        cboClientes.ValueMember = dsDatos.Tables("clientes").Columns(0).ToString

        'Definir el DataView

        dvOrdenes = dsDatos.Tables("Ordenes").DefaultView

    End Sub

 

   Private Sub BuscaOrdenes(ByVal sender As System.Object, _

            ByVal e As System.EventArgs) Handles cmdBuscar.Click

        Dim vdato As String = cboClientes.SelectedValue

        dvOrdenes.RowFilter = "CustomerId = '" & vdato & "'"

        With dgOrdenes

            .CaptionText = "Órdenes Registradas"

            .DataSource = dvOrdenes

        End With

    End Sub

 

    Private Sub cboClientes_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboClientes.SelectedIndexChanged

        dgOrdenes.DataSource = Nothing

    End Sub

End Class

 

Como se pueden dar cuenta, es una de las formas mas sencillas de obtener un Maestro - Detalle, también es posible agregar una relación (Relation) entre las dos tablas (DataTables) y utilizar el método GetChildRows del objeto DataRow para obtener el detalle.

Suerte a todos, espero les sirva de ayuda.

Ing. Fernando Luque Sánchez
Trujillo - Perú


Espacios de nombres usados en el código de este artículo:

System.Data
System.Data.SqlClient


Fichero con el código de ejemplo: FernandoLuque_MaestroDetalleSimple.zip - Tamaño 14 KB


ir al índice