ASP
.NET - Sincronizando dados com DropDownlist
Neste artigo eu vou mostrar como podemos sincronizar informações entre dois controles dropdownlist onde essas informações serão acessadas usando stored procedures a partir de um banco de dados SQL Server.
Neste artigo você vai aprender a :
Requisitos:
Objetivos
Criar uma aplicação ASP .NET Web Forms que sincronize dados entre dois controles DropDownList
Criando o projeto no Visual Studio 2012 Express for web
Abra o Visual Studio 2012 Express for web e clique em New Web Site;
A seguir selecione o template Visual .NET-> Web -> ASP .NET Empty Web Application, informe o nome SincronizandoDropDownList e clique em OK;
![]() |
O template usado cria um projeto contendo apenas a estrutura básica sem nenhuma página.
A seguir no menu PROJECT clique em Add New Item e selecione o template Web Form informando o nome Default.aspx e clicando no botão Add;
![]() |
Criando o banco de dados e as tabelas
No nosso exemplo vamos sincronizar dados entre dois controles ASP .NET e para isso eu vou usar um exemplo simples mas que é muito comum.
Imagine o cenário onde temos uma página com dois controles DropDownList onde no primeiro serão exibidos a relação de estados.
Quando o usuário selecionar um estado no primeiro controle o segundo controle será preenchido com cidades daquele estado.
Para isso eu vou criar um banco de dados chamado Cadastro.mdf e duas tabelas: Estados e Cidades com a estrutura mostrada abaixo:
![]() |
![]() |
| Tabela Estados | Tabela Cidades |
Para criar stored procedures basta expandir os objetos da conexão com o banco de dados Cadastro e clicar com o botão direito do mouse sobre o objeto Stored Procedures e clicar em Add new Stored Procedure;
1- A stored procedure getEstados seleciona todos os registros da tabela Estados
| CREATE PROCEDURE [dbo].[getEstados] as begin select * from Estados end |
2- A stored procedure getCidades seleciona as cidades da tabela Cidades cujo campo EstadoId é igual ao parâmetro @EstadoId
| CREATE PROCEDURE [dbo].[getCidades] ( @EstadoId int ) as begin select * from Cidades where EstadoId = @EstadoId end |
Ao final deveremos ver na janela DataBase Explorer os seguintes objetos:
![]() |
Dessa forma ja temos nossas tabelas e as stored procedures criadas e prontas para serem usadas.
Abra a página Default.aspx e no modo Design arraste a partir da ToolBox dois controles DropDownList : ID= ddlEstados e ID=ddlCidades, e um controle Label com ID=lblmsg, conforme o leiaute mostrado na figura abaixo:
![]() |
Veja como deve ficar o código gerado no arquivo Default.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Sincronizando DropDownList </title>
<style type="text/css">
.auto-style1 {
font-size: x-large;
color: #0033CC;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<span class="auto-style1"><strong>Macoratti .net - Sincronizando DropDownList</strong></span>
<hr />
Selecione o Estado : <asp:DropDownList ID="ddlEstados" runat="server" Height="16px" Width="225px" AutoPostBack="True"></asp:DropDownList>
<p>
Selecione o Cidade : <asp:DropDownList ID="ddlCidades" runat="server" Height="18px" Width="225px" AutoPostBack="True"></asp:DropDownList>
</div>
<p>
<asp:Label ID="lblmsg" runat="server" style="font-weight: 700; color: #FF0000"></asp:Label>
</p>
</form>
</body>
</html>
|
Agora vamos criar uma classe para acessar os dados no SQL Server.
No menu Web Site clique em Add New item e selecione o template Class informando o nome Acesso.vb;
A seguir digite o código abaixo neste arquivo:
Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.SqlClient
Public Class Acesso
Private Shared sqlconn As SqlConnection = New SqlConnection("Data Source=(localDB)\v11.0;Initial Catalog=Cadastro;Integrated Security=True")
Public Shared Function getEstados() As DataTable
Try
sqlconn.Open()
Dim dtEstado As New DataTable()
Dim cmd As New SqlCommand("getEstados", sqlconn)
cmd.CommandType = CommandType.StoredProcedure
Dim daEstado As New SqlDataAdapter(cmd)
daEstado.Fill(dtEstado)
If dtEstado.Rows.Count > 0 Then
Return dtEstado
Else
Return Nothing
End If
Catch ex As Exception
Throw ex
Finally
sqlconn.Close()
End Try
End Function
Public Shared Function getCidades(ByVal ind As Integer) As DataTable
Try
sqlconn.Open()
Dim dtCidade As New DataTable()
Dim cmd As New SqlCommand("getCidades", sqlconn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@EstadoId", SqlDbType.Int).Value = ind
Dim daCidade As New SqlDataAdapter(cmd)
daCidade.Fill(dtCidade)
If dtCidade.Rows.Count > 0 Then
Return dtCidade
Else
Return Nothing
End If
Catch ex As Exception
Throw ex
Finally
sqlconn.Close()
End Try
End Function
End Class
|
A classe Acesso possui dois métodos estáticos (Shared) :
No evento Load da página vamos definir a rotina vincularEstados() verificando se a requisição não é um postback;
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not IsPostBack Then
vincularEstados()
End If
End Sub
|
Abaixo temos o código da rotina verificaEstados() que acessa o método getEstados da classe Acesso e preenche o controle dropdownlist ddlEstados;
Private Sub vincularEstados()
Try
ddlEstados.DataSource = Acesso.getEstados
ddlEstados.DataTextField = "EstadoNome"
ddlEstados.DataValueField = "EstadoId"
ddlEstados.DataBind()
ddlEstados.Items.Insert(0, New ListItem("----Selecione o Estado----"))
Catch ex As Exception
lblmsg.Text = "Erro : " & ex.Message
End Try
End Sub
|
Agora para preencher o segundo dropdownlist com base no estado selecionado vamos usar o método SelectedIndexChanged do primeiro controle dropdownlist e atribuir a ele o código conforme mostrado a seguir:
Protected Sub ddlEstados_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddlEstados.SelectedIndexChanged
Try
Dim valor As Integer = ddlEstados.SelectedValue
If valor > 0 Then
ddlCidades.DataSource = Acesso.getCidades(valor)
ddlCidades.DataTextField = "CidadeNome"
ddlCidades.DataValueField = "CidadeId"
ddlCidades.DataBind()
ddlCidades.Items.Insert(0, New ListItem("----Selecione a cidade ----"))
Else
lblmsg.Text = "Selecione um Estado..."
End If
Catch ex As Exception
lblmsg.Text = "Erro : " & ex.Message
End Try
End Sub
|
No código estamos obtendo o valor selecionado do dropdownlist ddlEstados e usando o método getCidades da classe Acesso preenchendo o segundo dropdownlist ddlCidades;
Executando o web site teremos o resultado mostrado nas figuras abaixo:
1- seleção do estado
![]() |
2- exibição das cidades relacionadas
![]() |
Uma última palavra. Para que o exemplo funcione você tem que definir a propriedade AutoPostBack do dropdownlist ddlEstados como igual a True. Sem isso não vai funcionar.
![]() |
O dropdownlist ddlCidades pode estar com AutoPostBack igual a false que o exemplo funciona.
Pegue o projeto completo aqui:
SincronizandoDropDownList.zip
Mat 6:7
E, orando, não useis de vãs repetições, como os gentios; porque pensam que pelo seu muito falar serão ouvidos.Mat 6:8
Não vos assemelheis, pois, a eles; porque vosso Pai sabe o que vos é necessário, antes de vós lho pedirdes.Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
ASP .NET 4.5 Web Forms - Exibindo informações dos ... - Macoratti.ne