ASP.NET - Exibindo tabelas e campos em um dropdowlist


Trabalhar com esquemas de banco de dados no ASP.NET é muito simples. Neste artigo você vai aprender a tratar esquemas de banco de dados Access para exibir tabelas e campos de tabelas em uma página ASP.NET.

Estarei usando o Web Matrix como editor de código para o exemplo do artigo e testando a execução da página no servidor do Web Matrix.

Antes de ir direto ao assunto vou apenas recordar o básico sobre o controle dropdownlist:

- Para declarar um componente dropdownlist em uma página usamos a seguinte declaração:

<asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList>

- Para incluir alguns itens de forma estática no dropdownlist

<asp:DropDownList id="DropDownList1" runat="server">
   <asp:ListItem Value="TesteDado1">TesteDado1</asp:ListItem>
   <asp:ListItem Value="TesteDado2">TesteDado2</asp:ListItem>
</asp:DropDownList>

Nota: Voce pode usar o Visual Studio.NET e usar a caixa de propriedades do controle Properties --> Items para incluir itens.

- Para remover um item da lista usamos : DropDownList.Remove()

- Para limpar toda a lista usamos : DropDownList.Items.Clear()

- Para obter o item selecionado usamos : DropDownList.SelectedItem.Value

Agora abra o Web Matrix e crie uma nova página ASP.NET usando a linguagem VB.NET. O nome dado a página pode ser esquemaTabelaOleDB.aspx.

No modo Design inclua no formulário os componentes: TexTBox , DropDownList , e Button , conforme a figura abaixo:

Na guia Code vamos incluir o código que vai dar vida a página.

No evento Load a página temos: O código do componente dropdownlist - ddlcampos - não exibe nenhum item quando da carga da página.

Sub Page_Load(Source as Object, E as EventArgs)
    ddlcampos.selectedIndex = -1
End Sub

O evento CLick do botão de comando - Obter Relação de tabelas do Banco de dados - possui o seguinte código:

Se o nome do banco de dados for informado , ele será aberto e o esquema será obtido para exibição das tabelas do banco de dados no dropdownlist.

Sub Button1_Click(sender As Object, e As EventArgs)

if txtNomeBd.text <> "" then

 Dim Conexao As New OleDbConnection()
 Dim esquemaTabela As DataTable
 Dim i As Integer

 Conexao.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & txtNomeBD.text
 Conexao.Open()

 ddlTabelas.Items.Clear()

 esquemaTabela = Conexao.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})

 For i = 0 To esquemaTabela.Rows.Count - 1
    ddlTabelas.Items.Add(esquemaTabela.Rows(i)!TABLE_NAME.ToString)
 Next i

 Conexao.Close()
end if

End Sub

O evento Click do botão de comando - Obter relação de campos da tabela selecionada - tem o seguinte código :

Montamos a instrução SQL select com no valor selecionado no dropdownlist ddltabelas.

Sub Button2_Click(sender As Object, e As EventArgs)

if ddlTabelas.selectedIndex <> -1 then

  Dim strConn as string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & txtNomeBD.text
 
Dim strSQL as string = "Select * from " & ddlTabelas.SelectedValue.ToString

  Dim Conexao as New OleDBConnection(strConn)
  Dim esquemaTabela As DataTable
  Dim campos As DataRow
  Dim propriedade As DataColumn
  Dim Cmd as New OLEDBCommand(strSQL, Conexao)

  Conexao.Open()

 Dim dr As OleDbDataReader

 dr = cmd.ExecuteReader
 esquemaTabela = dr.GetSchemaTable()

 ddlCampos.items.Clear()

For Each campos In esquemaTabela.Rows
    For Each propriedade In esquemaTabela.Columns
         if propriedade.ColumnName="ColumnName" then
                  ddlCampos.Items.add(campos(propriedade).ToString())
         End If
    Next
Next

dr.Close()
Conexao.Close()
else

end if
End Sub

Ao executar a página iremos obter primeiro a relação das tabelas do banco de dados informado.

Com base na tabela selecionada , ao clicar no botão para exibir os campos, os campos referente a tabela serão exibidos:

Veja a página funcionando em : http://www.visualbasic.mat.br/aspnet/esquemaTabelaOleDb.aspx (o nome do banco de dados esta fixo por questão de segurança)

Pegue o código completo aqui : esquemaTabelaOleDb.zip

Eu sei é apenas ASP.NET , mas eu gosto...


José Carlos Macoratti