Usuário com melhor resposta
seleção de dados de um combobox

Pergunta
-
Bom Dia
estou programando em C# e banco de dados SQL Server 2005
tenho 2 combobox e as informações do mesmo estão sendo puxados do banco de dados
1 combo para Setor e outro para departamento
e gostaria de saber como faço para quando o usuario selecionar um dado no combo setor apareça só os dados referente aquele dado no combo departamento
exemplo: se no combo Setor for selecionado ADMINISTRAÇÃO no combo Departamento deverá aparece somente CONTABILIDADE,SISTEMAS E JURIDICO
Obrigado
Respostas
-
Voce esta usando varios Select. Deveria ser apenas um select. O exemplo que dei serve perfeitamente. usa o select que eu postei.
Assim funciona. Estas a inventer coisa, assim nao fucniona amigo, Segue o exemplo que dei o a dica do @ LuizMLPinto.
Se tiveres duvida, Le a sua pergunta original denovo.
Obrigado.
Just Be Humble Malange!- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 6 de agosto de 2010 18:59
- Marcado como Resposta Fernanda SimõesModerator segunda-feira, 9 de agosto de 2010 18:15
-
boas, seguiste o caminho + complicado, mas nada está perdido.
evento selecindexchanged da combobox cbxSetor
DataRowView ln = cbxSetor.SelectedItem as DataRowView;
daProblema.Tables[0].DefaultView.RowFilter="fk_setor=" + ln["pk_setor"];
na tabela problema tem que haver um foreign key cod_setor.
espero ter ajudado.- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 6 de agosto de 2010 18:59
- Marcado como Resposta Fernanda SimõesModerator segunda-feira, 9 de agosto de 2010 18:15
Todas as Respostas
-
Cara isso eh facil, desde que voce tenha na sua tabela departamento uma chave estrangeira que contenha o ID da chave primaria da tabela Setor.
Então quando voce selecionar um setor no 1º combo voce busca na tabela Departamento os departamentos que contem o mesmo ID daquele que vc selecionou no 1º combo, entendeu?!?
flvv
-
Gustavo,
Se quiser um exemplo concreto do que o Leandro sugeriu, dê uma olhada nesta thread:
André Alves de Lima
Visite o meu site: http://andrealveslima.spaces.live.com
Me siga no Twitter: @andrealveslima -
boas, um dataset e bindingsource para cada combobox.dataset carrega o bindigsource que por sua vez carrega a combobox.penso que sabes carregar uma combobox, é preciso definir DisplayMember e ValueMember.
depois no evento selecindexchanged da combobox setor, capturar a chave do setor e filtar no bindingsource do departamento
tipo:
evento selecindexchangedda combobox setor
DataRowView ln = comboBox1.SelectedItem as DataRowView;
sourceDepartamento.Filter="fk_setor=" + ln["pk_setor"];
espero ter ajudado. -
String select= "Select * From Tabela_Sector OUTER JOIN Table_Departamento ON Table_Sector.ID = Table_Departamento.IDMe"; Dataset DST = New DataSet(); SqlDataAdapter dapater = New SqlDataAdapter(); dapater.Fill(DST); BindingSource BDS = New BindingSource(); BDS.DataSource=DST; this.ComboBox1.DataSource = BDS; this.ComboBox1.DisplayMember = "Sector"; this.ComboBox1.ValueMember = "ID"; this.ComboBox2.DataSource =BDS; this.ComboBox1.DisplayMember = "Departamento"; this.ComboBox1.ValueMember = "IDMe";
Eu fario o que o LuizMLPinto sugerio. Seria a forma acertada a fazer sem complicar. No teu select que puxa a informacao das Duas Tabelas usa um Join dentro do Select. Para funcionar tu Tens de ter as Tabelas Unidas Por uma Chave Primaria e Chave estnageira.
Depois de carregar como o Select, Pass essa informacao no teu Dataset O DataTable e passa para o teu BindingSource. Faz um Bound(link) no Datasource das ComboBox com o teu BindingSource. E no Metodo DisplayMember e ValueMember voce escolhe o que mostrar.
Isto faz exactamento o que voce quer, sempre que voce fazer um click no combobox1 ele vai fazer sincronizacao com a combobox2 e mostrando que voce escolheu com o metodo DisplayMember.
Just Be Humble Malange! -
certo
tenhu uma tabela departamento com chave primaria ccusto e chave estrangeira cod_setor
e no setor a chave primaria cod_setor
estando assim vinculadas
fiz o seguinte:
private void Solicitacao_Load(object sender, EventArgs e)
{
// string de conexao
string Conexao = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\GUSTAVO\Desktop\Backup\SHK\SHK.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";// consulta
string sqlSetor = "SELECT cod_setor,setor FROM setor";
string sqlProblema = "SELECT cod_problema,problema FROM problema";
string sqlDepartamento = "SELECT ccusto,departamento from departamento";
// cria um data adapter
SqlDataAdapter daSetor = new SqlDataAdapter(sqlSetor, Conexao);
SqlDataAdapter daProblema = new SqlDataAdapter(sqlProblema, Conexao);
SqlDataAdapter daDepartamento = new SqlDataAdapter(sqlDepartamento, Conexao);
// cria um data table para guardar os dados
DataTable dtResultadoSetor = new DataTable();
DataTable dtResultadoProblema = new DataTable();
DataTable dtResultadoDepartamento = new DataTable();
// preenchendo o data table usando o metodo Fill do adapter
daSetor.Fill(dtResultadoSetor);
daProblema.Fill(dtResultadoProblema);
daDepartamento.Fill(dtResultadoDepartamento);
// DataTable populado, atribuir ao datasource do combobox
cbxSetor.DataSource = dtResultadoSetor;
cbxSetor.DisplayMember = "setor";
cbxSetor.ValueMember = "cod_setor";cbxProblema.DataSource = dtResultadoProblema;
cbxProblema.DisplayMember = "problema";
cbxProblema.ValueMember = "cod_problema";cbxDepartamento.DataSource = dtResultadoDepartamento;
cbxDepartamento.DisplayMember = "departamento";
cbxDepartamento.ValueMember = "ccusto";}
agora ele esta puxando as informações diretamente do banco
mas como faço para quando o usuario selecionar um dado no combo setor apareça só os dados referente aquele dado no combo departamento?
Obrigado
-
Voce esta usando varios Select. Deveria ser apenas um select. O exemplo que dei serve perfeitamente. usa o select que eu postei.
Assim funciona. Estas a inventer coisa, assim nao fucniona amigo, Segue o exemplo que dei o a dica do @ LuizMLPinto.
Se tiveres duvida, Le a sua pergunta original denovo.
Obrigado.
Just Be Humble Malange!- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 6 de agosto de 2010 18:59
- Marcado como Resposta Fernanda SimõesModerator segunda-feira, 9 de agosto de 2010 18:15
-
boas, seguiste o caminho + complicado, mas nada está perdido.
evento selecindexchanged da combobox cbxSetor
DataRowView ln = cbxSetor.SelectedItem as DataRowView;
daProblema.Tables[0].DefaultView.RowFilter="fk_setor=" + ln["pk_setor"];
na tabela problema tem que haver um foreign key cod_setor.
espero ter ajudado.- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 6 de agosto de 2010 18:59
- Marcado como Resposta Fernanda SimõesModerator segunda-feira, 9 de agosto de 2010 18:15