VB.NET - Exibindo valores de tabelas relacionadas
Neste
artigo você vai aprender como exibir em um datagrid valores de uma tabela filha
relacionada com uma tabela pai.
Vai aprender também a calcular valores agregados e exibir os valores em colunas
do datagrid.
Para você entender melhor vamos usar duas tabelas presentes no banco de dados Northwind.mdb , as tabelas : Orders e Orders Details.
|
|
tabela - Orders | tabela - Order Details |
Se você tem uma pequena noção sobre banco de dados relacionais vai perceber que existe um relacionamento entre as duas tabelas que pode ser feito pelo campo OrderId , abaixo estou exibindo o tipo de relacionamento existente : um para muitos:
Relacionamento entre a tabela Orders e Orders Details
Tipo - um-para-muitos Para um pedido pode existir muitos detalhes de pedidos campo de relacionamento - OrderId |
Vamos criar um projeto no VS.NET do tipo Windows Application onde no formulário iremos usar um controle DataGrid para exibir o relacionamento Pai-Filho e os valores totalizados para cada linha do relacionamento.
Os passos que iremos efetuar para obter o resultado são:
1- Vamos criar um DataSet contendo a tabela Orders e Orders Details e vamos criar um relacionamento entre estas tabelas.
2- Em seguida vamos criar uma expressão que será incluída na tabela Orders Details para calcular o preço de cada linha.
3- Os valores agregados para o preço total do pedido e o número de linhas de Orders Details são incluidos na tabela Orders.
4- Ao final vinculamos a visão padrão da tabela Orders ao datagrid para exibir o resultado.
Você pode criar colunas agregadas em uma tabela para exibir informação sumário para um registro filho.
Quando um DataRelation existe entre uma tabela Pai e uma tabela Filha em um DataSet você pode fazer referencia a um registro da tabela filha usando o prefixo Child. para o nome da coluna na tabela filha.
No código abaixo usamos COUNT(Child.ProductID) para retornar o número de registros filhos de Order Details para o registro da tabela pai Order.
Os imports usado no projeto são:
Imports
SystemImports
System.DataImports
System.Data.OleDb
Declaramos as seguintes variáveis no início do formulário:
' constantes para os nomes das tabelas Private TABELA_PEDIDOS As [String] = "Orders"
Private
TABELA_DETALHES_PEDIDOS As [String] = "OrderDetails"
' constante para o relacionamento
Private RELACAO_PEDIDOS_DETALHES_PEDIDOS As [String] = "relacao_Pedidos_DetalhesPedidos"' constante para o campo
Private CAMPO_PEDIDOID As [String] = "OrderID"
O código do evento Click do botão de comando - Processar - é o seguinte :
Private Sub btnProcessar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcessar.Click Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=d:\teste\Northwind.mdb" Dim ds As New DataSet Dim da As OleDbDataAdapter ' preenche a tabela Order e a inclui no DataSet da = New OleDbDataAdapter("SELECT * FROM Orders", conn) Dim orderTable As New DataTable(TABELA_PEDIDOS) da.Fill(orderTable) ds.Tables.Add(orderTable) ' preenche a tabela OrderDetails e a inclui no dataset da = New OleDbDataAdapter("SELECT * FROM [Order Details]", conn) Dim orderDetailTable As New DataTable(TABELA_DETALHES_PEDIDOS) da.Fill(orderDetailTable) ds.Tables.Add(orderDetailTable) ' cria um realcionamento entre as tabelas ds.Relations.Add(RELACAO_PEDIDOS_DETALHES_PEDIDOS, ds.Tables(TABELA_PEDIDOS).Columns(CAMPO_PEDIDOID), _ ds.Tables(TABELA_DETALHES_PEDIDOS).Columns(CAMPO_PEDIDOID), True) ' cria a expressão para calculo do total da linha orderDetailTable.Columns.Add("Total_Detalhe_Pedido", GetType([Decimal]), "(Quantity * UnitPrice) * (1-Discount)") ' cria os valores agregados de OrderDetails na tabela Pedido orderTable.Columns.Add("Detalhe_Pedido_Qtde", GetType(Integer), "COUNT(Child.ProductId)") orderTable.Columns.Add("Pedido_Total", GetType([Decimal]), "SUM(Child.Total_Detalhe_Pedido)") ' Vincula o dataset ao datagrid dgValores.DataSource = ds.DefaultViewManager 'dgValores.DataSource = ds.Tables(TABELA_PEDIDOS) dgValores.DataMember = TABELA_PEDIDOS End Sub
|
Executando o projeto teremos o seguinte resultado:
Exibindo a tabela Orders e o relacionamento criado com a tabela Order Details |
Calculando e exibindo os valores de cada linha da tabela Order Details |
Pegue o projeto aqui : valoresAgregados.zip
Aguarde mais artigos VB.NET
José Carlos Macoratti