Caro(a) Leitor(a), gostaria de mostrar hoje como inserir um valor na combo / dropdownlist depois dela já preenchida. Recebi alguns e-mails de programadores iniciantes perguntando como fazer isso. Este artigo foi feito para ajudar.

Os dados são carregados do banco de dados com o tipo de dado chamado DataTable. Os valores são preenchidos usando o DataBind, mas depois disso, preciso colocar mais um valor na posição 0 ou na posição que eu quiser, como fazer isso?

Tag: Visual Studio 11, C#, combo, dropdownlist

É simples de ser feito, mas precisa prestar atenção depois de preencher os dados. O primeiro passo é conectar ao banco, fazer o select necessário e retornar um DataTable. Se você retornar um DataSet, basta colocar o ponto Tables[0], como no exemplo listagem 1.

[CODE]
return Conexao.ExecuteDataSet(sql.ToString()).Tables[0];
[/CODE]
Listagem1: Retornando DataTable.

Note que a execução do DataSet retorna esse tipo,  se você colocar o ponto Tables[0] ele retorna o tipo DataTable. Esse é um framework que desenvolvi e uso para usar em meus aplicativos internos.

Fiz um framework de acesso a dados para conexão em vários bancos diferentes usando segurança e criptografia de dados, inclusive na string de conexão. Em artigos posteriores posso falar mais como criar um.

Depois que retornou o dado do tipo DataTable, atribui minha combo chamada de cmbTodosBancos. Listagem 2.

[CODE]
HTML
<asp:DropDownList ID="cmbTodosBancos" runat="server">
</asp:DropDownList>

C#
cmbTodosBancos.DataSource = BuscarBanco(_parametros);
[/CODE]
Listagem 2: Parte HTML  e C# da combo

Depois de retornar os valores, preciso informar qual é o campo de valor e qual é o campo que vai aparecer para o usuário. Eu gosto de fazer no código C#.  Listagem 3.

[CODE]
C#
cmbTodosBancos.DataSource = BuscarBanco(_parametros);
 
cmbTodosBancos.DataValueField = "CodigoId";
cmbTodosBancos.DataTextField = "Descricao";
            
cmbTodosBancos.DataBind();
[/CODE]
Listagem 3: Preenchimento os campos

Note os atributos, DataValueField serve para atribuir o valor da combo. Ao selecionar alguma descrição, automaticamente o código pega o valor. O que vai aparecer para o cliente é o atributo DataTextField, geralmente a descrição do banco de dados. 

Depois disso é necessário chamar o DataBind() para preencher os dados. Esse CodigoId e Descricao estão entre aspas são campos que vieram do meu banco de dados. 

Para preencher um valor, ou adicionar um novo na combo é necessário colocar um código depois do DataBind(). Listagem 4.

[CODE]
cmbTodosBancos.Items.Insert(0, new ListItem("<< Selecione >>","0"));
[/CODE]
Listagem 4: Inserindo novo valor na combo

Note que foi usado o atributo chamado Items.Insert passando como parâmetro primeiro o 0 e depois uma lista. Esse 0 indica que é a posição onde vai aparecer para o usuário do sistema. O 0 é a primeira posição. 

Depois utilizei o ListItem instanciando uma vez com o new ListItem. No list eu posso colocar apenas uma descrição ou uma descrição e um valor. Se você for verificar o valor escolhido para o usuário, é melhor colocar o valor zero. Com isso, você pode verificar se a posição 0 está selecionada para passar para o próximo passo.

Para pegar o valor da combo depois que o usuário escolher e clicar no botão basta usar. Listagem 5.

[CODE]
String a = cmbTodosBancos.SelectedValue;
[/CODE]

Bom, é isso que precisa fazer para preencher uma combo / dropdownlist pelo código vindo do banco de dados. Depois basta acrescentar uma lista com a posição zero falando para o usuário selecionar um valor.

Espero que tenha gostado e qualquer dúvida pode entrar em contato pelo site pessoal www.mauriciojunior.org