CIDADE CONFORME UF
Olá, tenho dois combobox: cmbUF e cmbCidade. Como se faz para carregar as cidades de acordo com o estado selecionado no cmbUF em C#/Access2007. No momento para carregar diretamente os combos estou usando conforme abaixo, mas a partir de agora preciso filtrar as cidades de acordo com o Estado. Como fica???
private void carregaUF()
{
Conexao conn = new Conexao();
DataTable dados = conn.Pesquisar([Ô]SELECT * FROM tbUF ORDER BY UF[Ô]);
cmbUF.Text = [Ô][Ô];
cmbUF.ValueMember = [Ô]codUF[Ô];
cmbUF.DisplayMember = [Ô]siglaUF[Ô];
cmbUF.DataSource = dados;
cmbUF.SelectedIndex = -1;
}
private void carregaCidade()
{
Conexao conn = new Conexao();
DataTable dados = conn.Pesquisar([Ô]SELECT * FROM tbCidade ORDER BY Cidade[Ô]);
cmbCidade.Text = [Ô][Ô];
cmbCidade.ValueMember = [Ô]codCidade[Ô];
cmbCidade.DisplayMember = [Ô]Cidade[Ô];
cmbCidade.DataSource = dados;
cmbCidade.SelectedIndex = -1;
}
private void carregaUF()
{
Conexao conn = new Conexao();
DataTable dados = conn.Pesquisar([Ô]SELECT * FROM tbUF ORDER BY UF[Ô]);
cmbUF.Text = [Ô][Ô];
cmbUF.ValueMember = [Ô]codUF[Ô];
cmbUF.DisplayMember = [Ô]siglaUF[Ô];
cmbUF.DataSource = dados;
cmbUF.SelectedIndex = -1;
}
private void carregaCidade()
{
Conexao conn = new Conexao();
DataTable dados = conn.Pesquisar([Ô]SELECT * FROM tbCidade ORDER BY Cidade[Ô]);
cmbCidade.Text = [Ô][Ô];
cmbCidade.ValueMember = [Ô]codCidade[Ô];
cmbCidade.DisplayMember = [Ô]Cidade[Ô];
cmbCidade.DataSource = dados;
cmbCidade.SelectedIndex = -1;
}
Na tabela de cidades você tem um campo com o id do estado?
Se tiver, basta fazer um Where na tabela das cidades usando o Value do combobox do estado.
Algo como:
DataTable dados = conn.Pesquisar(String.Format([Ô]SELECT * FROM tbCidade WHERE id_uf={0} ORDER BY Cidade[Ô], cmbUF.SelectedValue));
Se tiver, basta fazer um Where na tabela das cidades usando o Value do combobox do estado.
Algo como:
DataTable dados = conn.Pesquisar(String.Format([Ô]SELECT * FROM tbCidade WHERE id_uf={0} ORDER BY Cidade[Ô], cmbUF.SelectedValue));
DS2T, isso ai vai em qual combo?em qual evento?
SelectedIndexChanged do cmbUF
D2ST, fiz conforme abaixo e está dando erro de operador faltando em [ô]codUF=[ô]
private void cmbUF_SelectedIndexChanged(object sender, EventArgs e)
{
Conexao conn = new Conexao();
DataTable dados = conn.Pesquisar(String.Format([Ô]SELECT * FROM tbCidade WHERE codUF={0} ORDER BY Cidade[Ô], cmbUF.SelectedValue));
cmbCidade.DataSource = dados;
}
private void cmbUF_SelectedIndexChanged(object sender, EventArgs e)
{
Conexao conn = new Conexao();
DataTable dados = conn.Pesquisar(String.Format([Ô]SELECT * FROM tbCidade WHERE codUF={0} ORDER BY Cidade[Ô], cmbUF.SelectedValue));
cmbCidade.DataSource = dados;
}
Seu codUF tá no banco como tipo numérico (smallint, tinyint, int, bigint, numeric)? Se não tiver, tem que usar aspas simples (recomendo mudar o campo para o tipo numérico)
O cmbUF.SelectedValue está retornando algum valor?
O cmbUF.SelectedValue está retornando algum valor?
D2ST, o campo codUF já é do tipo numérico. Quando vou tentar ADICIONAR, ou ALTERAR dados já dá o erro de sintaxe de operador na expressão de consulta.
Alan
Alan
Tente assim:
private void cmbUF_SelectedIndexChanged(object sender, EventArgs e)
{
if (cmbUF.SelectedIndex == -1) return;
Conexao conn = new Conexao();
DataTable dados = conn.Pesquisar(String.Format([Ô]SELECT * FROM tbCidade WHERE codUF={0} ORDER BY Cidade[Ô], cmbUF.SelectedValue));
cmbCidade.DataSource = dados;
}
Coloquei uma linha pra verificar se o index não está -1. Quando você tá carregando o combo, você usa isso:
cmbUF.SelectedIndex = -1;
O que por sua vez, acaba disparando o evento SelectedIndexChanged. Mas como ele tá com index = -1... dá ruim.
private void cmbUF_SelectedIndexChanged(object sender, EventArgs e)
{
if (cmbUF.SelectedIndex == -1) return;
Conexao conn = new Conexao();
DataTable dados = conn.Pesquisar(String.Format([Ô]SELECT * FROM tbCidade WHERE codUF={0} ORDER BY Cidade[Ô], cmbUF.SelectedValue));
cmbCidade.DataSource = dados;
}
Coloquei uma linha pra verificar se o index não está -1. Quando você tá carregando o combo, você usa isso:
cmbUF.SelectedIndex = -1;
O que por sua vez, acaba disparando o evento SelectedIndexChanged. Mas como ele tá com index = -1... dá ruim.
DS2T, da maneira acima não deu erro nenhum, mas mesmo selecionando estados diferentes, carregas todas as cidades sem filtrar pelo estado. Vou postar o projeto para visualização do que está acontecendo. Para testar: no menu CADASTRO ---> CONTATOS -----> clicar em ADICIONAR ou ALTERAR para fazer o teste.Então segue...
Alan
Alan
Cara, você não associou o evento ao controle. Eu tinha falado pra você debugar, você nem fez né?
Se tivesse feito, veria que o evento nem estava sendo disparado.
Vou te passar o projeto de volta. Mas debugar é uma ferramenta importante para desenvolver cara. Se tivesse usado um breakpoint, teria descoberto na hora.
Se tivesse feito, veria que o evento nem estava sendo disparado.
Vou te passar o projeto de volta. Mas debugar é uma ferramenta importante para desenvolver cara. Se tivesse usado um breakpoint, teria descoberto na hora.
DS2T, desculpe a ignorância, mas iniciei a usar c# a pouco tempo e não tenho ideia de como se faz para utilizar debug e breakpoints. Até o momento tudo o que tu viu nesse pequeno sistema que postei montei como frankstein, partes e partes de sistemas e dicas nos sites de programação e de colegas do vbmania. Portanto obrigado pela paciência e pela ajuda....
Tópico encerrado , respostas não são mais permitidas