ASP .NET - Criando um formulário Mestre-detalhe (Web Forms)
Vamos criar um formulário Mestre-detalhe em ASP.NET com C# ?
Então vamos lá...
Suponha que você tenha duas tabelas em um banco de dados Access chamado Teste.mdb . As tabelas são Pedidos e DetalhesPedidos com as respectivas estruturas:
|
|
Você deseja exibir os dados da tabela Pedidos em uma página Web de forma que quando o usuário clicar em um link de pedidos os detalhes fossem exibidos na mesma página. A aparência da página seria a exibida na figura abaixo. Tá bom para você assim ?
Para atingir este objetivo vou criar uma aplicação ASP.NET usando o Web Matrix com a linguagem C#.
Abra então o WebMatrix e crie um nova pagina ASP.NET conforme configuração mostrada na figura abaixo:
Agora vamos definir o design , o html e o código da nossa aplicação , certo ?
Inclua dois datagrids , algum texto e uma label no modo design conforme mostrado abaixo:
O código HTML eu nem vou mostrar pois é gerado automaticamente. Vou mostrar o código que você deve incluir na guia Code do Web Matrix:
public
DataSet m_ds; public DataRelation m_rel; //cria um novo objeto Datatable DataTable dt = new DataTable(); // define um objeto DataRow DataRow dr; void Page_Load(object sender, System.EventArgs e) { //define dois objetos OleDbDataAdapter OleDbDataAdapter cmd, cmd1; String strConn, strSQL; //String de conexao com o banco de dados strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("teste.mdb") + ";"; m_ds = new DataSet(); //instrucao SQL para selecionar todos os registros da tabela pedidos strSQL = "select * from Pedidos"; cmd1 = new OleDbDataAdapter(strSQL, strConn); cmd1.Fill(m_ds, "Pedidos"); //instrucao SQL para selecionar os registros da tabela DetalhesPedidos strSQL = "select PedidoId, NomeProduto, Quantidade from DetalhesPedidos"; cmd = new OleDbDataAdapter(strSQL, strConn); cmd.Fill(m_ds, "DetalhesPedidos"); //cria relacionamento entre as tabelas m_rel = new DataRelation("Pedidos_Linhas", m_ds.Tables["Pedidos"].Columns["PedidoID"], m_ds.Tables["DetalhesPedidos"].Columns["PedidoID"]); m_ds.Relations.Add(m_rel); //cria um DataView e vincula ao DataSource ligando ao datagrid Mestre DataView dvMestre = m_ds.Tables["Pedidos"].DefaultView; Mestre.DataSource = dvMestre; Mestre.DataBind(); //Cria novas colunas e as adiciona ao objeto DataTable dt.Columns.Add(new DataColumn("PedidoID", typeof(Int32))); dt.Columns.Add(new DataColumn("NomeProduto", typeof(String))); dt.Columns.Add(new DataColumn("Quantidade", typeof(Int32))); } //exibe os detalhes das tabelas relacionadas void Mestre_ExibeDetalhes(object sender, DataGridCommandEventArgs e) { int contaLinha; string strTemp; contaLinha = e.Item.ItemIndex; try { DataRow[] ChildRows = m_ds.Tables["Pedidos"].Rows[contaLinha].GetChildRows("Pedidos_Linhas"); foreach(DataRow dr1 in ChildRows) { dr = dt.NewRow(); dr.ItemArray = dr1.ItemArray; dt.Rows.Add(dr); } //cria DataView e vincula ao DataSource ligando a datagrid Detalhes DataView dv = new DataView(dt); Detalhes.DataSource = dv; Detalhes.DataBind(); } catch(Exception ex) { Label1.Text = "Status: Exceção : " + ex; } } |
As linhas com duas barras (//) são comentários (como no java) e , eu já comentei o código mas vou chamar atenção para alguns pontos importantes do código :
1- Você cria dois objetos
OleDataAdapter e preenche cada DataSource com os dados de cada tabela
2- Cria o relacionamento entre as tabela via código
3- Cria um DataView para cada Tabela e vincula cada um ao respectivo
datagrid
4- Preenche as colunas do objeto DataTable com os dados dos detalhes a
serem exibidos
Não esqueça de declarar no começo da página os namespaces para acesso aos dados:
<%@
Page Language="C#" Debug="true" %> <%@ import Namespace="System.Data" %> <%@ import Namespace="System.Data.OleDb" %> |
Até o próximo artigo ASP.NET ...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: