CRIAR ROTINA MODULE PREENCHER COMBOBOX

ALEXANDREBS 06/10/2014 18:38:09
#441737
Gostaria de criar uma rotina dentro do Module onde o mesmo possa preencher varios combobox, pois o jeito que eu preencho os meus combobox é adicionando eles no itens e no qual me da um pouco de trabalho, então pensei em criar essa rotina para facilitar.

Então peço ajuda para resolver esse pequeno problema

TUNUSAT 07/10/2014 06:16:29
#441747
ALEXANDREBS,

Acho que você quer algo +/- assim. é preciso adaptar para seu caso...

Abaixo tenho uma [Ô]Sub[Ô] chamada [Ô]CarregaCombo[Ô]. Ela recebe quatro parâmetros
1 - A própria ComboBox;
2 - Uma DataSource;
3 - Duas Strings;
Precisa rodar uma função chamada [Ô]PreencheCombo[Ô] também.


Public Shared Sub CarregaCombo(ByVal pCombobox As Object, ByVal pDataSource As Object, ByVal pColunaParaTEXT As String, ByVal pColunaIndex As String)
pCombobox.DataSource = pDataSource
pCombobox.DisplayMember = pColunaParaTEXT
pCombobox.ValueMember = pColunaIndex
End Sub


Esta Function é para Preencher a ComboBox. Ela recebe um Código e o nome da Tabela (você pode modifica-la para passar a SQL inteira se quiser):
veja que a situação [Ô]A[Ô] (Ativa) é chumbada (HardCode).


Public Function PreencheCombo(ByVal strCodigo As String, ByVal strTabelas As String)

MyBase.StrComando.AppendLine([Ô] SELECT [Ô])
MyBase.StrComando.AppendLine(strCodigo)
MyBase.StrComando.AppendLine([Ô] , Nome [Ô])
MyBase.StrComando.AppendLine([Ô] FROM [Ô] & strTabelas & [Ô] [Ô])
MyBase.StrComando.AppendLine([Ô] WHERE Situacao = [ô]A[ô] [Ô])

Return MyBase.RetornaLista(StrComando.ToString())
End Function


Esta é outra sub só para ajudar a posicionar a Combo:


Public Shared Sub PreencheComboPrioridade(ByVal pComboBox As Object, ByVal pValueMember As Integer)
Dim i As Integer

If pValueMember <> -1 Then

For i = 0 To pComboBox.Items.Count
pComboBox.SelectedIndex = i

If pComboBox.SelectedValue = pValueMember Then
Exit Sub
End If

Next

End If

pComboBox.SelectedIndex = -1
End Sub


Aqui coloquei um exemplo de como usar da Sub:


[ô]Carregar combo de prioridade
cboPrioridade.DataSource = Nothing
Bll.Util.CarregaCombo(cboPrioridade, PreencheComboPrioridade, [Ô]Nome[Ô], [Ô]CodigoPrioridade[Ô])

If Not oManutencaoSolicitacao.CodigoPrioridade = Nothing Then _
cboPrioridade.SelectedValue = oManutencaoSolicitacao.CodigoPrioridade


Seria isto?

[][ô]s,
Tunusat.
PEGUDO 07/10/2014 07:17:56
#441748
Cara,
Eu faria com menos código:

[txt-color=#0000f0]Public Class[/txt-color] Class1
[txt-color=#007100] [ô][ô][ô]<Summary>
[ô][ô][ô]Retorna um DataSet de acordo com o comando SQL passado
[ô][ô][ô]<Param=[Ô]sql[Ô]>Comando SQL a ser executado</Param>
[ô][ô][ô]<Param=[Ô]iCon[Ô]>Objeto SqlConnection JÁ COM A CONEXÃO ABERTA.</Param>
[ô][ô][ô]</Summary>[/txt-color]
[txt-color=#0000f0]Public Shared Property[/txt-color] pegaDataSource(sql As String, iCon as SqlConnection) [txt-color=#0000f0]As DataSet[/txt-color]
Get
[txt-color=#0000f0]Dim[/txt-color] comando As New SqlCommand(sql, conec)

[txt-color=#0000f0]Using[/txt-color] adapter As New SqlDataAdapter(comando)
adapter.Fill(pegaDataSource)
[txt-color=#0000f0] End Using[/txt-color]

comando.Dispose()

[txt-color=#0000f0]Return[/txt-color] pegaDataSource
[txt-color=#0000f0]End Get
End Property
End Class[/txt-color]


Para chamar:
[txt-color=#0000f0]Public Sub[/txt-color] Button1_Click(byVal...) [txt-color=#0000f0]Handles[/txt-color] Button1.Click
Dim conec [txt-color=#0000f0]As New SqlConnection[/txt-color]
[txt-color=#0000f0] Dim [/txt-color]sql As String = [txt-color=#e80000][Ô]Coloque aqui o comando SELECT que você quiser[Ô][/txt-color]
[txt-color=#007100][ô]Coloque aqui o código para abrir a conexão com o banco de dados[/txt-color]
[txt-color=#007100][ô]CÓDIGO[ô][/txt-color]

ComboBox1.DataSource = Class1.pegaDataSource(sql, conec)
End Sub


Repare que eu coloquei [Ô]Class1.pegaDataSource(sql, conec)[Ô] porque o pegaDataSource é do tipo shared, por isso não precisa ser instanciado.
O [Ô]conec[Ô], eu utilizei o SqlConnection, mas se você estiver usando o OleDb é só trocar SqlConnection por OleDbConnection.
Tem que abrir a conexão antes de executar o pegaDataSource, senão irá dar erro.
Pra ser sincero não lembro se tem que dar Biding depois de [Ô]ComboBox1.DataSource[Ô]. Veja se isso se aplica.
Bom... Espero ter ajudado como o amigo TUNUSAT o fez.
ALEXANDREBS 07/10/2014 11:33:15
#441758
Obrigado pelas dicas, feitas com sucesso.

Outra ajuda que eu estou precisando é uma rotina de preenchimento do combobox sem ter que fazer pelo Banco de dados. ( Module )

Ex = Public Function PreencheCombo
Adicionando os dados que irão aparecer nos combobox
Abacaxi
Maça
Tomate
Outros
End Sub

Depois no formulanrio eu vou chamar a rotina.
Sub combobox1
[txt-color=#e80000]PreencheCombo[/txt-color]
End sub

Obrigado.
PEGUDO 08/10/2014 07:23:59
#441796
Cara,
Faz um FOR no seu conjunto de dados e os insere no Combo
For a = 0 to 9
ComboBox1.Items.Add(a)
Next


No caso de um DataSet
For Each linha As DataRow In DataSet1.Tables(0).Rows
ComboBox1.Items.Add(linha.Item(0))
Next


Eu coloquei [txt-color=#0000f0]linha.Item(0)[/txt-color] para pegar a primeira célula da linha.
Se eu estivesse retornando uma tabela que tivesse uma coluna chamada [txt-color=#e80000][Ô]setor[Ô][/txt-color], eu poderia fazer assim: [txt-color=#0000f0]linha.Item([/txt-color][txt-color=#e80000][Ô]setor[Ô][/txt-color][txt-color=#0000f0])[/txt-color]
Faça seu login para responder