none
Preenchimento de combobox RRS feed

  • Pergunta

  • Olá!

    Tenho uma tabela de configuração dos campos que utilizo no sistema. Ela tem cerca de 300 registros.

    Da forma atual, para cada objeto eu faço uma busca no banco, o que acaba tornando o processo um pouco lento em alguns momentos do dia. Preciso otimizar isso.

    Pensei em fazer da seguinte forma:

    Carregar de uma única vez os dados e armazenar em um datatable, e ir utilizando esse datatable (que chamei de dtCampos) de acordo com o que necessito, uma vez para cada objeto. Os campos que retornam da base são esses:

    • id_campo_dinamico
    • descricao_campo
    • valor_campo
    • nome_campo

    A chamada do meu método que irá preencher as informações é a seguinte:

    CamposDinamicos.PreencheDropDownList(ddlUF, True, dtCampos)

    ddlUF é um dos campos que tenho que preencher, assim como ddlNacionalidade.

    E o meu método é o seguinte:

        Public Shared Sub PreencheDropDownList(ByRef ddl As DropDownList, ByVal ordenar As Boolean, ByRef dt As DataTable)
            Try
                If ordenar Then dt.DefaultView.Sort = "valor_campo ASC"
                ddl.Items.Clear()
                ddl.DataTextField = "valor_campo"
                ddl.DataValueField = "id_campo_dinamico"
                ddl.DataSource = dt.Select("nome_campo = '" & ddl.ID & "'")
                ddl.DataBind()
                ddl.Items.Insert(0, "--- Selecione ---")
                ddl.SelectedIndex = 0
            Catch ex As Exception
    
            End Try
        End Sub

    Só que ao fazer o DataBind(), é exibida a seguinte mensagem:

    "DataBinding: 'System.Data.DataRow' não contém uma propriedade com o nome 'valor_campo'."

    Mas se eu efetuar a consulta manualmente pelo "valor_campo", eu consigo visualizar os dados.

    dt.Rows(19)("valor_campo")

    Alguma ideia do que pode ser, ou de como posso resolver essa situação?

    quarta-feira, 19 de março de 2014 23:42

Respostas

  • Esse erro é pq na sua Select ou seja no seu DataTable não existe nenhum campo com o nome valor_campo.

    Veja sua select e se o nome nao esta diferente do que usa em seu DataTable.

    Uma dica use Collections em vez de DataTable.

    • Marcado como Resposta Giovani Cr quarta-feira, 26 de março de 2014 18:32
    quinta-feira, 20 de março de 2014 02:10
  • Você pode fazer o seguinte:

     Public Shared Sub CarregaCombo(ByRef cboCombo As System.Windows.Forms.ComboBox, ByVal strSQL As String)
            
            Dim dstCarrega As DataSet

            Try
                dstCarrega = clsConecta.RetornaDataSet(strSQL) 'Aqui você passa o seu dataset ou datatable
                cboCombo.DisplayMember = dstCarrega.Tables(0).Columns(1).ColumnName
                cboCombo.ValueMember = dstCarrega.Tables(0).Columns(0).ColumnName
                cboCombo.DataSource = dstCarrega.Tables(0)
                cboCombo.SelectedIndex = -1
            Catch ex As Exception
                TrataErro(ex)
            End Try

        End Sub

    Espero ter ajudado.

    ABS[]

    • Marcado como Resposta Giovani Cr quarta-feira, 26 de março de 2014 18:32
    sexta-feira, 21 de março de 2014 20:59

Todas as Respostas

  • Esse erro é pq na sua Select ou seja no seu DataTable não existe nenhum campo com o nome valor_campo.

    Veja sua select e se o nome nao esta diferente do que usa em seu DataTable.

    Uma dica use Collections em vez de DataTable.

    • Marcado como Resposta Giovani Cr quarta-feira, 26 de março de 2014 18:32
    quinta-feira, 20 de março de 2014 02:10
  • Você pode fazer o seguinte:

     Public Shared Sub CarregaCombo(ByRef cboCombo As System.Windows.Forms.ComboBox, ByVal strSQL As String)
            
            Dim dstCarrega As DataSet

            Try
                dstCarrega = clsConecta.RetornaDataSet(strSQL) 'Aqui você passa o seu dataset ou datatable
                cboCombo.DisplayMember = dstCarrega.Tables(0).Columns(1).ColumnName
                cboCombo.ValueMember = dstCarrega.Tables(0).Columns(0).ColumnName
                cboCombo.DataSource = dstCarrega.Tables(0)
                cboCombo.SelectedIndex = -1
            Catch ex As Exception
                TrataErro(ex)
            End Try

        End Sub

    Espero ter ajudado.

    ABS[]

    • Marcado como Resposta Giovani Cr quarta-feira, 26 de março de 2014 18:32
    sexta-feira, 21 de março de 2014 20:59