Neste artigo vamos recordar como podemos definir relacionamentos entre os controles DataGridView e tabelas de um banco de dados Microsoft Access de forma a exibir um relacionamento mestre detalhes.
Vamos usar como exemplo o banco de dados Northwind.mdb, o nosso saco de pancadas, que desde dos tempos do Visual Basic é usado como exemplo em diversos artigos.
Abaixo vemos o relacionamento entre as tabelas do banco de dados Northwind.mdb:
Nosso objetivo será exibir em um controle DataGridView todos os funcionários (Employees) e outro DataGridView os pedidos (Orders) e em um último DataGridView os detalhes dos pedidos (Order Details).
Vou usar o Visual Studio 2013 Professional e criar um projeto do tipo Windows Forms Application usando a linguagem Visual Basic com o nome DataGridView_MestreDetalhes;
No formulário padrão inclua 3 controles DataGridView e um controle Button:
Defina o seguinte leiaute no formulário:
Agora no evento Click do botão de comando inclua o código abaixo:
Private Sub
btnExibir_Click(sender As Object, e As EventArgs) Handles btnExibir.Click Dim ds As DataSet Using conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\dados\Northwind.mdb")
ds = New DataSet
ds.Relations.Add("EmployeeOrder", ds.Tables("Employee").Columns("EmployeeID"),
_
ds.Relations.Add("Order2Details", ds.Tables("Orders").Columns("OrderID"),
_
dgvFuncionarios.DataSource = ds
|
O código responsável por essa 'mágica' é definido pela propriedade Relations do DataSet que obtém a coleção relações que vinculam tabelas e permitem a navegação de tabelas pai para as tabelas filho.
ds.Relations.Add("EmployeeOrder", ds.Tables("Employee").Columns("EmployeeID"), ds.Tables("Orders").Columns("EmployeeID"))
ds.Relations.Add("Order2Details", ds.Tables("Orders").Columns("OrderID"), ds.Tables("OrderDetails").Columns("OrderID"))
Depois basta usar as propriedades DataSource e DataMember de cada DataGridView para exibir os dados relacionados:
dgvFuncionarios.DataSource = ds
dgvFuncionarios.DataMember = "Employee"
dgvPedidos.DataSource = ds
dgvPedidos.DataMember = "Employee.EmployeeOrder"
dgvDetalhesPedidos.DataSource = ds
dgvDetalhesPedidos.DataMember = "Employee.EmployeeOrder.Order2Details"
A seguir vemos o projeto em execução exibindo os dados relacionados em cada DataGridView:
Pegue o projeto completo aqui: DataGridView_MasterDetalhes.zip
Joã 8:49 Jesus respondeu: Eu não tenho demônio; antes honro a meu Pai, e vós me desonrais.
Joã 8:50 Eu não busco a minha glória; há quem a busque, e julgue.
Joã 8:51 Em verdade, em verdade vos digo que, se alguém guardar a minha palavra, nunca verá a morte.
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#