Usuário com melhor resposta
Falhas Combobox

Pergunta
-
Eu estou desenvolvendo uma aplicação em VB 2012, e em um formulário eu estou com problemas para carregar os combobox. Primeiro, há um combobox com a Categoria, e há um segundo com os produtos, o segundo só deve carregar os produtos relacionados a categoria selecionada. Mas não está carregando. Alguém poderia me dizer onde estou errando, por favor??? Segue o código:
Public Sub BindcboCategoria()
Dim cn As New SqlConnection
Dim status As String = ""
Dim ds As New DataSet
Dim da As New SqlDataAdapter
Dim sql As String = ""
cboCategoria.DataSource = ds.Tables("Categoria")
cboCategoria.DisplayMember = "CategoriaNome"
sql = "SELECT * FROM Categoria ORDER BY CategoriaNome"
End SubPublic Sub BindcboProduto()
Dim cn As New SqlConnection
Dim status As String = ""
Dim ds As New DataSet
Dim da As New SqlDataAdapter
Dim sql As String = ""
cboProduto.DataSource = ds.Tables("Produto")
cboProduto.DisplayMember = "PRODUTONOME"
sql = "SELECT * FROM PRODUTO WHERE CATEGORIAID = '" & Me.cboCategoria.Text & "'ORDER BY PRODUTONOME'"
End Sub
Respostas
-
Uma opção é passar o combobox como parâmetro veja ai:
E para chamar no seu evento seria assim:Public Class Popular_Combo Public Sub BindcboCategoria(ByVal combo As ComboBox) Dim cx As New Conexao Dim sql As String = ""
Dim dados As New DataTable cx.conectar() sql = "SELECT * FROM Categoria ORDER BY CategoriaNome" Dim cmd As New SqlCommand cmd.CommandText = sql cmd.Connection = cx.cn Dim dr As SqlDataReader = cmd.ExecuteReader
dados.Load(dr) combo.DataSource = dados combo.DisplayMember = "CategoriaName" combo.ValueMember = "CategoriaCod" End Sub Public Sub BindcboProduto(ByVal combo As ComboBox) Dim cx As New Conexao Dim sql As String = ""
Dim dados As New DataTable
cx.conectar() sql = "SELECT * FROM Produto ORDER BY ProdutoNome" Dim cmd As New SqlCommand cmd.CommandText = sql cmd.Connection = cx.cn Dim dr As SqlDataReader = cmd.ExecuteReader
dados.Load(dr) combo.DataSource = dados combo.DisplayMember = "Produto" combo.ValueMember = "codigo" End Sub End Class
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim chamarcombo As New Popular_Combo chamarcombo.BindcboCategoria(cboCategoria) End Sub
- Sugerido como Resposta Mr. GMSOFT segunda-feira, 20 de outubro de 2014 16:05
- Marcado como Resposta Ronaldo.Pinheiro segunda-feira, 20 de outubro de 2014 18:11
- Editado Mr. GMSOFT segunda-feira, 20 de outubro de 2014 18:16
Todas as Respostas
-
Onde é chamado BindcboProduto?
Para que funcione, vc tem que executar esse metodo toda vez que altera categoria...
Att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Sugerido como Resposta Mr. GMSOFT segunda-feira, 20 de outubro de 2014 13:37
- Não Sugerido como Resposta Mr. GMSOFT segunda-feira, 20 de outubro de 2014 13:37
- Sugerido como Resposta Mr. GMSOFT segunda-feira, 20 de outubro de 2014 13:38
- Não Sugerido como Resposta Mr. GMSOFT segunda-feira, 20 de outubro de 2014 15:59
-
-
Willian
Eu mudei um pouco o código e criei uma Classe chamada Popular_Combo.
Imports System.Data.SqlClient
Public Class Popular_Combo
Public Sub BindcboCategoria()
Dim cx As New Conexao
Dim sql As String = ""
cx.conectar()
sql = "SELECT * FROM Categoria ORDER BY CategoriaNome"
Dim cmd As New SqlCommand
cmd.CommandText = sql
cmd.Connection = cx.cn
Dim dr As SqlDataReader = cmd.ExecuteReader
End Sub
Public Sub BindcboProduto()
Dim cx As New Conexao
Dim sql As String = ""
cx.conectar()
sql = "SELECT * FROM Produto ORDER BY ProdutoNome"
Dim cmd As New SqlCommand
cmd.CommandText = sql
cmd.Connection = cx.cn
Dim dr As SqlDataReader = cmd.ExecuteReader
End Sub
End Class
E no formulário eu coloquei assim chamando o BindcboCategoria:
Private Sub cboCategoria_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboCategoria.SelectedIndexChanged
Dim chamarcombo As New Popular_Combo
chamarcombo.BindcboCategoria()
End SubE continua retornando vazio o Combobox.Não estou entendendo onde eu estou errando.
- Editado Ronaldo.Pinheiro segunda-feira, 20 de outubro de 2014 14:57
-
No cbocategoria vc recarrega categoria?
Voce tem que carregar Produto
Private Sub cboCategoria_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboCategoria.SelectedIndexChanged Dim chamarcombo As New Popular_Combo 'chamarcombo.BindcboCategoria() - esta errado chamarcombo.BindcboProduto() End Sub
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
-
-
Ok.. em nenhum momento vc especificou que seu problema era com a combo Categoria. Quem le, acha que o problema é com produtos.
Note... a categoria tem que ser chamado no load do Form... Depois a cada modificaçao de categoria vc recarrega produtos.
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam TrindadeModerator segunda-feira, 20 de outubro de 2014 15:30
-
William
Esse código está no FORM_LOAD
Private Sub cboCategoria_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboCategoria.SelectedIndexChanged
Dim chamarcombo As New Popular_Combo
chamarcombo.BindcboCategoria()
End SubPelo que eu entendo, deveria funcionar. Mas não carrega nada. Meu problema todo é esse, ele não carrega nada.
-
Poste aqui o form_load... o que vc postou foi o "cboCategoria_SelectedIndexChanged"
E isso nao faz sentido.. o que vc esta fazendo ai é dizer que a cada modificaçao de categoria recarregue categoria.. ou seja, é como um cachorro correndo atras do proprio rabo.
Att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
-
Está faltando setar o DataSource, alterei a classe para retornar o DataReader:
Imports System.Data.SqlClient Public Class Popular_Combo Public Function BindcboCategoria() as SqlDataReader Dim cx As New Conexao Dim sql As String = "" cx.conectar() sql = "SELECT * FROM Categoria ORDER BY CategoriaNome" Dim cmd As New SqlCommand cmd.CommandText = sql cmd.Connection = cx.cn Dim dr As SqlDataReader = cmd.ExecuteReader Return dr End Function Public Function BindcboProduto() as SqlDataReader Dim cx As New Conexao Dim sql As String = "" cx.conectar() sql = "SELECT * FROM Produto ORDER BY ProdutoNome" Dim cmd As New SqlCommand cmd.CommandText = sql cmd.Connection = cx.cn Dim dr As SqlDataReader = cmd.ExecuteReader Return dr End Function End Class
E passei a setar o DataSource:
Dim chamarcombo As New Popular_Combo cboCategoria.DataSource = chamarcombo.BindcboCategoria() cboCategoria.DisplayMember = "CategoriaNome"
Marque se foi útil!
- Sugerido como Resposta Deric Ferreira segunda-feira, 20 de outubro de 2014 15:48
-
Willian
Eu mudei um pouco o código e criei uma Classe chamada Popular_Combo.
Imports System.Data.SqlClient
Public Class Popular_Combo
Public Sub BindcboCategoria()
Dim cx As New Conexao
Dim sql As String = ""
cx.conectar()
sql = "SELECT * FROM Categoria ORDER BY CategoriaNome"
Dim cmd As New SqlCommand
cmd.CommandText = sql
cmd.Connection = cx.cn
Dim dr As SqlDataReader = cmd.ExecuteReader
End Sub
Public Sub BindcboProduto()
Dim cx As New Conexao
Dim sql As String = ""
cx.conectar()
sql = "SELECT * FROM Produto ORDER BY ProdutoNome"
Dim cmd As New SqlCommand
cmd.CommandText = sql
cmd.Connection = cx.cn
Dim dr As SqlDataReader = cmd.ExecuteReader
End Sub
End Class
E no formulário eu coloquei assim chamando o BindcboCategoria:
Private Sub cboCategoria_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboCategoria.SelectedIndexChanged
Dim chamarcombo As New Popular_Combo
chamarcombo.BindcboCategoria()
End SubE continua retornando vazio o Combobox.Não estou entendendo onde eu estou errando.
Em que momento você chamou o cboCategoria para receber os dados do seu SQL??- Editado Mr. GMSOFT segunda-feira, 20 de outubro de 2014 15:50
-
Wiliam segue os códigos:
Classe:
Imports System.Data.SqlClient
Public Class Popular_Combo
Public Sub BindcboCategoria()
Dim cx As New Conexao
Dim sql As String = ""
cx.conectar()
sql = "SELECT * FROM Categoria ORDER BY CategoriaNome"
Dim cmd As New SqlCommand
cmd.CommandText = sql
cmd.Connection = cx.cn
Dim dr As SqlDataReader = cmd.ExecuteReader
Return
End Sub
Public Sub BindcboProduto()
Dim cx As New Conexao
Dim sql As String = ""
cx.conectar()
sql = "SELECT * FROM Produto WHERE CATEGORIAID = '" & Entrada.cboCategoria.Text & "' ORDER BY ProdutoNome"
Dim cmd As New SqlCommand
cmd.CommandText = sql
cmd.Connection = cx.cn
Dim dr As SqlDataReader = cmd.ExecuteReader
Return
End Sub
End ClassAgora o FORM_LOAD
Public Class Entrada
Private Sub Entrada_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the 'SindifortDataSet.FORNECEDOR' table. You can move, or remove it, as needed.
Me.FORNECEDORTableAdapter.Fill(Me.SindifortDataSet.FORNECEDOR)
'TODO: This line of code loads data into the 'SindifortDataSet.PRODUTO' table. You can move, or remove it, as needed.
Me.PRODUTOTableAdapter.Fill(Me.SindifortDataSet.PRODUTO)
'TODO: This line of code loads data into the 'SindifortDataSet.Categoria' table. You can move, or remove it, as needed.
Me.CategoriaTableAdapter.Fill(Me.SindifortDataSet.Categoria)
'TODO: This line of code loads data into the 'SindifortDataSet.ENTRADA' table. You can move, or remove it, as needed.
Me.ENTRADATableAdapter.Fill(Me.SindifortDataSet.ENTRADA)
Dim chamarcombo As New Popular_Combo
End Sub
Private Sub cboCategoria_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboCategoria.SelectedIndexChanged
Dim chamarcombo As New Popular_Combo
chamarcombo.BindcboCategoria()
End Sub
End Class -
Uma opção é passar o combobox como parâmetro veja ai:
E para chamar no seu evento seria assim:Public Class Popular_Combo Public Sub BindcboCategoria(ByVal combo As ComboBox) Dim cx As New Conexao Dim sql As String = ""
Dim dados As New DataTable cx.conectar() sql = "SELECT * FROM Categoria ORDER BY CategoriaNome" Dim cmd As New SqlCommand cmd.CommandText = sql cmd.Connection = cx.cn Dim dr As SqlDataReader = cmd.ExecuteReader
dados.Load(dr) combo.DataSource = dados combo.DisplayMember = "CategoriaName" combo.ValueMember = "CategoriaCod" End Sub Public Sub BindcboProduto(ByVal combo As ComboBox) Dim cx As New Conexao Dim sql As String = ""
Dim dados As New DataTable
cx.conectar() sql = "SELECT * FROM Produto ORDER BY ProdutoNome" Dim cmd As New SqlCommand cmd.CommandText = sql cmd.Connection = cx.cn Dim dr As SqlDataReader = cmd.ExecuteReader
dados.Load(dr) combo.DataSource = dados combo.DisplayMember = "Produto" combo.ValueMember = "codigo" End Sub End Class
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim chamarcombo As New Popular_Combo chamarcombo.BindcboCategoria(cboCategoria) End Sub
- Sugerido como Resposta Mr. GMSOFT segunda-feira, 20 de outubro de 2014 16:05
- Marcado como Resposta Ronaldo.Pinheiro segunda-feira, 20 de outubro de 2014 18:11
- Editado Mr. GMSOFT segunda-feira, 20 de outubro de 2014 18:16
-
-
MAs seu form load nao chama o metodo BindcboCategoria... o correto é mais ou menos assim:
Private Sub Entrada_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'TODO: This line of code loads data into the 'SindifortDataSet.FORNECEDOR' table. You can move, or remove it, as needed. Me.FORNECEDORTableAdapter.Fill(Me.SindifortDataSet.FORNECEDOR) 'TODO: This line of code loads data into the 'SindifortDataSet.PRODUTO' table. You can move, or remove it, as needed. Me.PRODUTOTableAdapter.Fill(Me.SindifortDataSet.PRODUTO) 'TODO: This line of code loads data into the 'SindifortDataSet.Categoria' table. You can move, or remove it, as needed. Me.CategoriaTableAdapter.Fill(Me.SindifortDataSet.Categoria) 'TODO: This line of code loads data into the 'SindifortDataSet.ENTRADA' table. You can move, or remove it, as needed. Me.ENTRADATableAdapter.Fill(Me.SindifortDataSet.ENTRADA) Dim chamarcombo As New Popular_Combo chamarcombo.BindcboCategoria() ' chamar o metodo aqui End Sub
esse trecho:
Private Sub cboCategoria_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboCategoria.SelectedIndexChanged Dim chamarcombo As New Popular_Combo chamarcombo.BindcboCategoria() End Sub End Class
nao faz sentido!!!
Att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
-
-
-
-
-
-
-