Usuário com melhor resposta
Preencher combobox apartir de outra combobox

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.
- Movido AndreAlvesLimaModerator sábado, 13 de agosto de 2011 00:27 (De:Visual Studio - Geral)
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 SubPrivate 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- Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 7 de novembro de 2011 19:28
-
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
- Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 7 de novembro de 2011 19:28
-
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:
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Sugerido como Resposta AndreAlvesLimaModerator segunda-feira, 15 de agosto de 2011 18:41
- Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 7 de novembro de 2011 19:28
Todas as Respostas
-
-
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";}
-
-
-
-
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 SubPrivate 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- Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 7 de novembro de 2011 19:28
-
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
- Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 7 de novembro de 2011 19:28
-
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:
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Sugerido como Resposta AndreAlvesLimaModerator segunda-feira, 15 de agosto de 2011 18:41
- Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 7 de novembro de 2011 19:28
-
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