none
Class para encher combo RRS feed

  • Pergunta

  • Boa tarde

    Fiz um método que enche um combo com informações do meu banco de dados, funcionou normalmente, o problema é que tenho vários combos que receberam as mesmas informações, logo preciso ficar chamando o métido para cada combo então pensei em criar um class que ao ser chamada encha o combo assim sempre que eu precisar enhcer um combo chamado a class se eu tiver 10 combos chamo a class para cada combo. Qual seria a melhor forma de fazer isso? Veja como fiz:

    Public Sub CarregaComboCodigoProduto()
        Dim ds As New DataSet()
        ds = ClassNegociosProduto.ConsultaProdutoGeral
    
        If ds.Tables(0).Rows.Count > 0 Then
          With Me.comboCodigo1
            .DataSource = ds.Tables(0).DefaultView
            .DisplayMember = "codigo_produto"
            .ValueMember = "codigo"
          End With
    
          With Me.comboCodigo2
            .DataSource = ds.Tables(0).DefaultView
            .DisplayMember = "codigo_produto"
            .ValueMember = "codigo"
          End With
    
          With Me.comboCodigo3
            .DataSource = ds.Tables(0).DefaultView
            .DisplayMember = "codigo_produto"
            .ValueMember = "codigo"
          End With
    
          With Me.comboCodigo4
            .DataSource = ds.Tables(0).DefaultView
            .DisplayMember = "codigo_produto"
            .ValueMember = "codigo"
          End With
    
          With Me.comboCodigo5
            .DataSource = ds.Tables(0).DefaultView
            .DisplayMember = "codigo_produto"
            .ValueMember = "codigo"
          End With
    
          With Me.comboCodigo6
            .DataSource = ds.Tables(0).DefaultView
            .DisplayMember = "codigo_produto"
            .ValueMember = "codigo"
          End With
          With Me.comboCodigo7
            .DataSource = ds.Tables(0).DefaultView
            .DisplayMember = "codigo_produto"
            .ValueMember = "codigo"
          End With
    
          With Me.comboCodigo8
            .DataSource = ds.Tables(0).DefaultView
            .DisplayMember = "codigo_produto"
            .ValueMember = "codigo"
          End With
    
          With Me.comboCodigo9
            .DataSource = ds.Tables(0).DefaultView
            .DisplayMember = "codigo_produto"
            .ValueMember = "codigo"
          End With
    
          With Me.comboCodigo10
            .DataSource = ds.Tables(0).DefaultView
            .DisplayMember = "codigo_produto"
            .ValueMember = "codigo"
          End With
    
          With Me.comboCodigo11
            .DataSource = ds.Tables(0).DefaultView
            .DisplayMember = "codigo_produto"
            .ValueMember = "codigo"
          End With
    
          With Me.comboCodigo12
            .DataSource = ds.Tables(0).DefaultView
            .DisplayMember = "codigo_produto"
            .ValueMember = "codigo"
          End With
    
          With Me.comboCodigo13
            .DataSource = ds.Tables(0).DefaultView
            .DisplayMember = "codigo_produto"
            .ValueMember = "codigo"
          End With
    
          With Me.comboCodigo14
            .DataSource = ds.Tables(0).DefaultView
            .DisplayMember = "codigo_produto"
            .ValueMember = "codigo"
          End With
    
          With Me.comboCodigo15
            .DataSource = ds.Tables(0).DefaultView
            .DisplayMember = "codigo_produto"
            .ValueMember = "codigo"
          End With
        End If
        
      End Sub
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        CarregaComboCodigoProduto()
      End Sub
    

    Alexandre
    segunda-feira, 4 de outubro de 2010 20:16

Respostas

  • Olá, faça com o loop. O "preencher" é só para o caso de ter mais controles do tipo dropdown e vc não queira preencher. Se for todos, tire essa validação

     

     

            Dim ctrl As Control
            For Each ctrl In Me.Controls
                If TypeOf (ctrl) Is ComboBox Then
                    If CType(ctrl, ComboBox).Tag.ToString() = "PREENCHER" Then
                        With CType(ctrl, ComboBox)
                            .DisplayMember = "codigo_produto"
                            .ValueMember = "codigo"
                            .DataSource = ds.Tables(0).DefaultView
                        End With
                    End If
                End If
            Next


    Thiago Jacometti Microsoft Developer @Dell Computers Mobile: +51-78122131 ID: 85*247569 Skype: tmattarwebco thiago@thiagomj.com
    terça-feira, 5 de outubro de 2010 17:00
  • Uma idéia (não sei se a mais viavel...)
    É fazer um laço para preencher os combos (já que basicamente são todos iguais)

    Private Sub CarregaComboCodigoProduto(ByVal combos() As ComboBox)
     Dim ds As New DataSet()
     ds = ClassNegociosProduto.ConsultaProdutoGeral
    
     For i As Integer = 0 To combos.Length -1 'não tenho certeza do "-1"
      With combos(i)
      .DataSource = ds.Tables(0).DefaultView
      .DisplayMember = "codigo_produto"
      .ValueMember = "codigo"
      End With
     Next
    End Sub
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
    Dim combos() As ComboBox = {comboCodigo1, _
    comboCodigo2, ...} 'passa todos os que vão ser setados
    
    CarregaComboCodigoProduto(combos)
    
    End Sub
    
    

    Att. Osni
    segunda-feira, 4 de outubro de 2010 20:41
  • Alexandre,

    Assim fica melhor:

    Public Sub CarregaComboCodigoProduto()
      Dim ds As New DataSet()
      ds = ClassNegociosProduto.ConsultaProdutoGeral
    
      If ds.Tables(0).Rows.Count > 0 Then
       Me.CarregaCombo(Me.comboCodigo1, ds.Tables(0).DefaultView);
       Me.CarregaCombo(Me.comboCodigo2, ds.Tables(0).DefaultView);
    
      ...
    
       Me.CarregaCombo(Me.comboCodigo15, ds.Tables(0).DefaultView);
      
     End Sub
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      CarregaComboCodigoProduto()
     End Sub
    
    Private Sub CarregaCombo(ByVal combo As System.Windows.Forms.ComboBox, ByVal dataSource As System.Object)
       With combo
        .DataSource = dataSource
        .DisplayMember = "codigo_produto"
        .ValueMember = "codigo"
       End With
    
    End Sub
    
    --------------------------------------------------------------------------------
    
    

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    segunda-feira, 4 de outubro de 2010 20:43
    Moderador

Todas as Respostas

  • Uma idéia (não sei se a mais viavel...)
    É fazer um laço para preencher os combos (já que basicamente são todos iguais)

    Private Sub CarregaComboCodigoProduto(ByVal combos() As ComboBox)
     Dim ds As New DataSet()
     ds = ClassNegociosProduto.ConsultaProdutoGeral
    
     For i As Integer = 0 To combos.Length -1 'não tenho certeza do "-1"
      With combos(i)
      .DataSource = ds.Tables(0).DefaultView
      .DisplayMember = "codigo_produto"
      .ValueMember = "codigo"
      End With
     Next
    End Sub
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
    Dim combos() As ComboBox = {comboCodigo1, _
    comboCodigo2, ...} 'passa todos os que vão ser setados
    
    CarregaComboCodigoProduto(combos)
    
    End Sub
    
    

    Att. Osni
    segunda-feira, 4 de outubro de 2010 20:41
  • Alexandre,

    Assim fica melhor:

    Public Sub CarregaComboCodigoProduto()
      Dim ds As New DataSet()
      ds = ClassNegociosProduto.ConsultaProdutoGeral
    
      If ds.Tables(0).Rows.Count > 0 Then
       Me.CarregaCombo(Me.comboCodigo1, ds.Tables(0).DefaultView);
       Me.CarregaCombo(Me.comboCodigo2, ds.Tables(0).DefaultView);
    
      ...
    
       Me.CarregaCombo(Me.comboCodigo15, ds.Tables(0).DefaultView);
      
     End Sub
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      CarregaComboCodigoProduto()
     End Sub
    
    Private Sub CarregaCombo(ByVal combo As System.Windows.Forms.ComboBox, ByVal dataSource As System.Object)
       With combo
        .DataSource = dataSource
        .DisplayMember = "codigo_produto"
        .ValueMember = "codigo"
       End With
    
    End Sub
    
    --------------------------------------------------------------------------------
    
    

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    segunda-feira, 4 de outubro de 2010 20:43
    Moderador
  • Oi... não sei como é o seu layout de tela... mas não seria possivel colocar um DataGrid com uma coluna de ComboBoxs ?
    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    segunda-feira, 4 de outubro de 2010 21:03
    Moderador
  • Olá, faça com o loop. O "preencher" é só para o caso de ter mais controles do tipo dropdown e vc não queira preencher. Se for todos, tire essa validação

     

     

            Dim ctrl As Control
            For Each ctrl In Me.Controls
                If TypeOf (ctrl) Is ComboBox Then
                    If CType(ctrl, ComboBox).Tag.ToString() = "PREENCHER" Then
                        With CType(ctrl, ComboBox)
                            .DisplayMember = "codigo_produto"
                            .ValueMember = "codigo"
                            .DataSource = ds.Tables(0).DefaultView
                        End With
                    End If
                End If
            Next


    Thiago Jacometti Microsoft Developer @Dell Computers Mobile: +51-78122131 ID: 85*247569 Skype: tmattarwebco thiago@thiagomj.com
    terça-feira, 5 de outubro de 2010 17:00
  • Como você pode ver, de um jeito ou de outro você vai ter que fazer um trabalhinho manual para dizer qual os combos seram setados...

    Dos 3 código mostrados até o momento, a diferença é de como será esse "trabalho manual"

    No meu você terá que passar por parametro quais os combos serão setados, no do Rogério você terá que repetir a chamada do método todos os combos e no do Thiago você terá que setar a propiedade TAG de cada combo que será setado...

    Todos tem um jeito simplificado de se fazer o preenchimento...

    Então fica por sua conta decidir qual forma fica mais viavel pra você...

     


    Att. Osni
    terça-feira, 5 de outubro de 2010 17:30