CIDADE CONFORME UF

ALANTB 17/11/2015 09:50:21
#454023
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;
}
DS2T 17/11/2015 09:59:17
#454024
Resposta escolhida
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));
ALANTB 17/11/2015 10:05:31
#454026
DS2T, isso ai vai em qual combo?em qual evento?
DS2T 17/11/2015 10:35:18
#454030
SelectedIndexChanged do cmbUF
ALANTB 17/11/2015 10:50:06
#454032
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;
}
DS2T 17/11/2015 11:25:41
#454036
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?
ALANTB 17/11/2015 11:42:50
#454038
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
DS2T 17/11/2015 14:52:24
#454040
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.
ALANTB 18/11/2015 08:06:11
#454076
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
DS2T 18/11/2015 08:56:05
#454083
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.
ALANTB 18/11/2015 09:55:52
#454097
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