Neste artigo veremos como usar o evento SelectedIndexChanged para que, ao selecionar um determinado Estado em um DropDownList, seja exibido uma lista de Cidades correspondentes em outro DropDownList.
Introdução – O evento SelectedIndexChanged é muito utilizado nos controles DropDownList, RadioButtonList, CheckBoxList e muitos outros controles ASP.NET. Este evento é disparado a cada vez que o usuário troca de opção nestes controles.
Nesta parte iremos criar duas tabelas de exemplo, inserir alguns registros em ambas as tabelas, de Estados e de Cidades, e criar uma aplicação adicionando dois DropDownLists.
Então crie duas tabelas no SQL Server, a de Estados e a de Cidades, a Listagem 01 nos mostra o script de criação das tabelas:
Listagem 01 – Script de criação das tabelas Estado e Cidade
CREATE TABLE Estado( IdEstado INT IDENTITY(1,1) NOT NULL, Estado VARCHAR(50) NOT NULL, DataCadastro DATETIME NOT NULL, CONSTRAINT PK_IdEstado PRIMARY KEY (IdEstado)) CREATE TABLE Cidade( IdCidade INT IDENTITY(1,1) NOT NULL, IdEstado INT NOT NULL, Cidade VARCHAR(100) NOT NULL, DataCadastro DATETIME NOT NULL, CONSTRAINT PK_IdCidade PRIMARY KEY (IdCidade), CONSTRAINT FK_Cidade_IdEstado FOREIGN KEY (IdEstado) REFERENCES Estado(IdEstado)) |
Note que a tabela Cidade é relacionada com a tabela Estado.
Vemos na Listagem 02 o script para criação dos estados e das cidades fictícias, uma cidade para cada estado.
Listagem 02 – Script de inserção dos registros nas tabelas criadas
INSERT INTO Estado VALUES ('Amapá', GETDATE())INSERT INTO Estado VALUES ('Ceará', GETDATE())INSERT INTO Estado VALUES ('Espírito Santo', GETDATE())INSERT INTO Estado VALUES ('Goiás', GETDATE())INSERT INTO Estado VALUES ('Minas Gerais', GETDATE())INSERT INTO Estado VALUES ('Rio de Janeiro', GETDATE())INSERT INTO Estado VALUES ('Rio Grande do Sul', GETDATE())INSERT INTO Estado VALUES ('Santa Catarina', GETDATE())INSERT INTO Estado VALUES ('São Paulo', GETDATE())INSERT INTO Estado VALUES ('Tocantins', GETDATE()) INSERT INTO Cidade VALUES (1, 'Cidade do Amapá', GETDATE())INSERT INTO Cidade VALUES (2, 'Cidade do Ceará', GETDATE())INSERT INTO Cidade VALUES (3, 'Cidade do Espírito Santo', GETDATE())INSERT INTO Cidade VALUES (4, 'Cidade de Goiás', GETDATE())INSERT INTO Cidade VALUES (5, 'Cidade de Minas Gerais', GETDATE())INSERT INTO Cidade VALUES (6, 'Cidade do Rio de Janeiro', GETDATE())INSERT INTO Cidade VALUES (7, 'Cidade do Rio Grande do Sul', GETDATE())INSERT INTO Cidade VALUES (8, 'Cidade de Santa Catarina', GETDATE())INSERT INTO Cidade VALUES (9, 'Cidade de São Paulo', GETDATE())INSERT INTO Cidade VALUES (10, 'Cidade de Tocantins', GETDATE()) |
Crie uma aplicação ASP.NET e nela inclua dois DropDownLists, como podemos ver na Listagem 03.
Listagem 03 – ASPX da página com os dois DropDownLists
<div> <h3>Evento SelectedIndexChanged</h3> <br /> Estado: <br /> <asp:DropDownList ID="ddlEstado" runat="server" /> <br /> <br /> Cidade: <br /> <asp:DropDownList ID="ddlCidade" runat="server" /> <br /></div> |
Listagem 04 – String de Conexão adicionada ao Web.Config
<connectionStrings> <add name="StringdeConexao" connectionString="Data Source=Banco\SQLEXPRESS;Initial Catalog=Artigos;Integrated Security=True" providerName="System.Data.SqlClient"/> </connectionStrings> |
Listagem 05 – Método para carregar os dados no DropDownList Estado
<i>private void CarregarDropDownListEstado() { string strInstrucao = "SELECT IdEstado, Estado FROM Estado"; using (SqlConnection objConexao = new SqlConnection(ConfigurationManager.ConnectionStrings["StringdeConexao"].ConnectionString)) { using (SqlCommand objCommand = new SqlCommand(strInstrucao, objConexao)) { objConexao.Open(); try { SqlDataReader objDataReader = objCommand.ExecuteReader(CommandBehavior.CloseConnection); ddlEstado.DataSource = objDataReader; ddlEstado.DataTextField = "Estado"; ddlEstado.DataValueField = "IdEstado"; ddlEstado.DataBind(); objDataReader.Close(); } catch (Exception ex) { throw new Exception(ex.Message); } objConexao.Close(); } } }</i> |
Chame o método no evento Page_Load da página, como é mostrado na Listagem 06.
Listagem 06 – Chamada ao método criado no evento Page_Load
if (!Page.IsPostBack){ CarregarDropDownListEstado(); } |
Figura 01 – DropDownList Estado
Na aspx da página altere o DropDownList adicionando a ele a propriedade AutoPostBack e chamando o evento que usaremos neste artigo. A Listagem 07 nos mostra um exemplo disso:
Listagem 07 – ASPX do DropDownList Estado
<asp:DropDownList ID="ddlEstado" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlEstado_SelectedIndexChanged" /> |
Listagem 08 – Evento SelectedIndexChanged
protected void ddlEstado_SelectedIndexChanged(object sender, EventArgs e) { if (!String.IsNullOrEmpty(ddlEstado.SelectedValue)) { CarregarDropDownListCidade(int.Parse(ddlEstado.SelectedValue)); } } |
Listagem 09 - Método para carregar os dados no DropDownList Cidade
private void CarregarDropDownListCidade(int IdEstado) { string strInstrucao = "SELECT IdCidade, Cidade FROM Cidade WHERE IdEstado = @IdEstado"; using (SqlConnection objConexao = new SqlConnection(ConfigurationManager.ConnectionStrings["StringdeConexao"].ConnectionString)) { using (SqlCommand objCommand = new SqlCommand(strInstrucao, objConexao)) { if (IdEstado > 0) { objCommand.Parameters.AddWithValue("@IdEstado", IdEstado); objConexao.Open(); try { SqlDataReader objDataReader = objCommand.ExecuteReader(CommandBehavior.CloseConnection); ddlCidade.DataSource = objDataReader; ddlCidade.DataTextField = "Cidade"; ddlCidade.DataValueField = "IdCidade"; ddlCidade.DataBind(); objDataReader.Close(); } catch (Exception ex) { throw new Exception(ex.Message); } objConexao.Close(); } } } } |
Figura 02 – DropDownList Cidade, carregado de acordo com o Estado
Nenhum comentário:
Postar um comentário