none
seleção de dados de um combobox RRS feed

  • 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

    quarta-feira, 21 de julho de 2010 14:29

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!
    sexta-feira, 23 de julho de 2010 12:19
    Moderador
  • 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.
    sexta-feira, 23 de julho de 2010 12:25

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

    quarta-feira, 21 de julho de 2010 15:48
  • Gustavo,

    Se quiser um exemplo concreto do que o Leandro sugeriu, dê uma olhada nesta thread:

    http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/b3d17ebd-dfc5-44d0-a748-788b9a4ac810


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    quarta-feira, 21 de julho de 2010 17:30
    Moderador
  • 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.
    quarta-feira, 21 de julho de 2010 21:14
  • 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!
    quinta-feira, 22 de julho de 2010 12:13
    Moderador
  • 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

     

    sexta-feira, 23 de julho de 2010 11:38
  • 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!
    sexta-feira, 23 de julho de 2010 12:19
    Moderador
  • 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.
    sexta-feira, 23 de julho de 2010 12:25