Usuário com melhor resposta
Preenchimento de combobox

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?
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
-
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 SubEspero ter ajudado.
ABS[]
- Marcado como Resposta Giovani Cr quarta-feira, 26 de março de 2014 18:32
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
-
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 SubEspero ter ajudado.
ABS[]
- Marcado como Resposta Giovani Cr quarta-feira, 26 de março de 2014 18:32