none
Preencher combobox apartir de outra combobox RRS feed

  • Pergunta

  • Tenho um Form com duas combobox tipo uma tem o andar do predio e a outra os aprtametos, queria que quando eu escolhesse o andar só aparecesse na outra combobox só so aprtamentos deste andar, no banco de dados as tabelas tem ligaçao atraves de FK.
    domingo, 7 de agosto de 2011 18:23

Respostas

  • Vo colocar um exemplo simples em vb.net.

    Criei um DataTable manualmente e adicionei dentro de um DataSet somente para ter dados para simular ( não é obrigatório adicionar no Dataset )

    No Load de form chamei o metodo que preenche a 1° combo, coloquei no evento SelectedIndexChanged uma rotina para adicionar os items na 2° combo, no seu caso você deverá substutuir meu código por um select no seu banco com base no SelectedValue trazendo os apartamentos do andar (Acredito que andar seja FK em apartamento).

     

      Sub preencheAndar()

            ' Create a new DataTable.
            Dim table As DataTable = New DataTable("ParentTable")

            ' Declare variables for DataColumn and DataRow objects.
            Dim column As DataColumn
            Dim row As DataRow

            ' Create new DataColumn, set DataType, ColumnName
            ' and add to DataTable.   
            column = New DataColumn()
            column.DataType = System.Type.GetType("System.Int32")
            column.ColumnName = "id"
            column.ReadOnly = True
            column.Unique = True

            ' Add the Column to the DataColumnCollection.
            table.Columns.Add(column)

            ' Create second column.
            column = New DataColumn()
            column.DataType = System.Type.GetType("System.String")
            column.ColumnName = "ParentItem"
            column.AutoIncrement = False
            column.Caption = "ParentItem"
            column.ReadOnly = False
            column.Unique = False

            ' Add the column to the table.
            table.Columns.Add(column)

            ' Make the ID column the primary key column.
            Dim PrimaryKeyColumns(0) As DataColumn
            PrimaryKeyColumns(0) = table.Columns("id")
            table.PrimaryKey = PrimaryKeyColumns

            ' Instantiate the DataSet variable.
            dataSet = New DataSet()

            ' Add the new DataTable to the DataSet.
            dataSet.Tables.Add(table)

            ' Create three new DataRow objects and add
            ' them to the DataTable
            Dim i As Integer
            For i = 0 To 2
                row = table.NewRow()
                row("id") = i
                row("ParentItem") = "ParentItem " + i.ToString()
                table.Rows.Add(row)
            Next i

            ComboBox1.DisplayMember = "ParentItem"
            ComboBox1.ValueMember = "ID"

            ComboBox1.DataSource = dataSet.Tables(0)

        End Sub

     

     

        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

            ComboBox2.Items.Clear()
            ComboBox2.Text = ""

            ' Adicionei os dados de forma manual, você deverá preencher essa combo
            ' da mesma maneira que você usou para preencher a 1°.
            ' Ex.: Select Ap From apartamento Where IDTORRE = ComboBox1.SelectedValue

            Select Case ComboBox1.SelectedValue

                Case 0

                    ComboBox2.Items.Add("AP1")
                    ComboBox2.Items.Add("AP2")
                    ComboBox2.Items.Add("AP3")

                Case 1

                    ComboBox2.Items.Add("AP4")
                    ComboBox2.Items.Add("AP5")
                    ComboBox2.Items.Add("AP6")

                Case 2

                    ComboBox2.Items.Add("AP7")
                    ComboBox2.Items.Add("AP8")
                    ComboBox2.Items.Add("AP9")

            End Select


        End Sub

    terça-feira, 9 de agosto de 2011 19:17
  • tenta fazer buscar os valores do andar e jogar numa array ai depois faz um loop jogando os valores da array para o collection do combobox tenta isso e ve se da
    quinta-feira, 11 de agosto de 2011 16:57
  • Wilson,

    Além das dicas dos colegas, sugiro que você dê uma olhada nesta outra thread, onde é mostrado como implementar cascading comboboxes utilizando DataView + RowFilter:

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


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    sábado, 13 de agosto de 2011 00:26
    Moderador

Todas as Respostas

  • Boa noite,

     

    Posta o código de como você esta fazendo para popular seu ComboBox..

     

    Att

    Evandro


    Não há medalha de ouro sem suor e não há sucesso sem trabalho e dedicação!
    segunda-feira, 8 de agosto de 2011 03:18
  • Estou usando Camadas:

    ficou assim camada DAL

    public DataTable ListaDeTorre
            {
                get
                {
                    MySqlConnection cn = new MySqlConnection();
                    cn.ConnectionString = Dados.StringDeConexao;
                    cn.Open();

                    MySqlDataAdapter da = new MySqlDataAdapter("select * from torre", cn);

                    DataTable dt = new DataTable();
                    da.Fill(dt);
                    cn.Close();
                    return dt;
                
                }
          
            }

     

    Camada BLL

     private PedidoDAL objDAL;

            public PedidoBLL()
            {
                objDAL = new PedidoDAL();
            }

            public DataTable ListaDeTorre
            {
                get
                {
                    return objDAL.ListaDeTorre;

                }


            }

     

    camaca do FORM

    private void FrmRequisicoes_Load(object sender, EventArgs e)
            {
                PedidoBLL obj = new PedidoBLL();
                this.torreCombo.DataSource = obj.ListaDeTorre;
                this.torreCombo.ValueMember = "IDTORRE";
                this.torreCombo.DisplayMember = "NOME";

    }

     

     

    segunda-feira, 8 de agosto de 2011 16:43
  • Wilsoncx basta vc da um novo select no banco usando o IDTorre que está no valuemember, coloca no evento da 1° combo, assim quando vc selecionar o andar, ele vai dar um select trazendo os apartamentos e preenchendo a segunda combo.

     

     

    terça-feira, 9 de agosto de 2011 11:15
  • valeu amigo estava pensando em algo assim vou tentar..
    terça-feira, 9 de agosto de 2011 14:35
  • teria uma diaca de como faço pois não estou conseguindo...
    terça-feira, 9 de agosto de 2011 16:53
  • Vo colocar um exemplo simples em vb.net.

    Criei um DataTable manualmente e adicionei dentro de um DataSet somente para ter dados para simular ( não é obrigatório adicionar no Dataset )

    No Load de form chamei o metodo que preenche a 1° combo, coloquei no evento SelectedIndexChanged uma rotina para adicionar os items na 2° combo, no seu caso você deverá substutuir meu código por um select no seu banco com base no SelectedValue trazendo os apartamentos do andar (Acredito que andar seja FK em apartamento).

     

      Sub preencheAndar()

            ' Create a new DataTable.
            Dim table As DataTable = New DataTable("ParentTable")

            ' Declare variables for DataColumn and DataRow objects.
            Dim column As DataColumn
            Dim row As DataRow

            ' Create new DataColumn, set DataType, ColumnName
            ' and add to DataTable.   
            column = New DataColumn()
            column.DataType = System.Type.GetType("System.Int32")
            column.ColumnName = "id"
            column.ReadOnly = True
            column.Unique = True

            ' Add the Column to the DataColumnCollection.
            table.Columns.Add(column)

            ' Create second column.
            column = New DataColumn()
            column.DataType = System.Type.GetType("System.String")
            column.ColumnName = "ParentItem"
            column.AutoIncrement = False
            column.Caption = "ParentItem"
            column.ReadOnly = False
            column.Unique = False

            ' Add the column to the table.
            table.Columns.Add(column)

            ' Make the ID column the primary key column.
            Dim PrimaryKeyColumns(0) As DataColumn
            PrimaryKeyColumns(0) = table.Columns("id")
            table.PrimaryKey = PrimaryKeyColumns

            ' Instantiate the DataSet variable.
            dataSet = New DataSet()

            ' Add the new DataTable to the DataSet.
            dataSet.Tables.Add(table)

            ' Create three new DataRow objects and add
            ' them to the DataTable
            Dim i As Integer
            For i = 0 To 2
                row = table.NewRow()
                row("id") = i
                row("ParentItem") = "ParentItem " + i.ToString()
                table.Rows.Add(row)
            Next i

            ComboBox1.DisplayMember = "ParentItem"
            ComboBox1.ValueMember = "ID"

            ComboBox1.DataSource = dataSet.Tables(0)

        End Sub

     

     

        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

            ComboBox2.Items.Clear()
            ComboBox2.Text = ""

            ' Adicionei os dados de forma manual, você deverá preencher essa combo
            ' da mesma maneira que você usou para preencher a 1°.
            ' Ex.: Select Ap From apartamento Where IDTORRE = ComboBox1.SelectedValue

            Select Case ComboBox1.SelectedValue

                Case 0

                    ComboBox2.Items.Add("AP1")
                    ComboBox2.Items.Add("AP2")
                    ComboBox2.Items.Add("AP3")

                Case 1

                    ComboBox2.Items.Add("AP4")
                    ComboBox2.Items.Add("AP5")
                    ComboBox2.Items.Add("AP6")

                Case 2

                    ComboBox2.Items.Add("AP7")
                    ComboBox2.Items.Add("AP8")
                    ComboBox2.Items.Add("AP9")

            End Select


        End Sub

    terça-feira, 9 de agosto de 2011 19:17
  • tenta fazer buscar os valores do andar e jogar numa array ai depois faz um loop jogando os valores da array para o collection do combobox tenta isso e ve se da
    quinta-feira, 11 de agosto de 2011 16:57
  • Wilson,

    Além das dicas dos colegas, sugiro que você dê uma olhada nesta outra thread, onde é mostrado como implementar cascading comboboxes utilizando DataView + RowFilter:

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


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    sábado, 13 de agosto de 2011 00:26
    Moderador
  • Prezado(a),
    Estou migrando seu post para o fórum de Windows Forms.
    Por favor, das próximas vezes que tiver alguma dúvida relacionada a esse assunto, poste por lá.
    Obrigado.

    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    sábado, 13 de agosto de 2011 00:26
    Moderador