VB.NET - Incluindo DataRows em uma combobox


Já vimos como preencher uma combobox usando Data Binding. Lembra ?

Se não lembra não custa nada mostrar o código para fazer este serviço. Veja o código a seguir:

    Imports System.Data.OleDb
    'define o comando SQL para selecionar os dados da tabela funcionarios
    Dim strSQL As String = "Select CódigoDoFuncionário,Nome From Funcionários"
    'define a conexao com o banco de dados Northwind.mdb 
    Dim Connection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\teste\Northwind.mdb")
    'define um dataadapter para a conexao
    Dim da As New OleDbDataAdapter(strSQL, Connection)
    'define e preenche o dataset com os dados da tabela funcionarios
    Dim ds As New DataSet
    da.Fill(ds, "Funcionarios")

 

    'cria uma nova tabela
    Dim dt As New DataTable
    
    dt.Columns.Add("Nome", GetType(System.String))
    dt.Columns.Add("CódigoDoFuncionário", GetType(System.String))

    ' Define dois datarows para preencher a tabela
    Dim dr As DataRow
    Dim drNovaRow As DataRow

    'percorre a tabela funcionarios definida e preenche com dados da tabela da base de dados 
    For Each dr In ds.Tables("Funcionarios").Rows()
        drNovaRow = dt.newRow()
        drNovaRow("Nome") = dr("Nome")
        drNovaRow("CódigoDoFuncionário") = dr("CódigoDoFuncionário")
        dt.Rows.Add(drNovaRow)
    Next
    'define o estilo da combobox
    cboFunci.DropDownStyle = ComboBoxStyle.DropDownList
    'preenche a combobox com os nomes dos funcionarios e seleciona o primeiro valor    
    With ComboBox1
        .DataSource = dt
        .DisplayMember = "Nome"
        .ValueMember = "CódigoDoFuncionário"
        .SelectedIndex = 0
    End With

O resultado da execução do código acima em um formulário Windows com uma combobox e um botão de comando é:

Mas queremos obter o mesmo resultado sem usar data binding. Como fazer isto ? 

"Elementar meu caro Watson": Crie um novo projeto do tipo Windows Application e no formulário inclua uma combobox e um botão de comando.

Para fazer um pouco diferente vamos incluir um novo módulo no projeto no menu Project | Add Module

Neste módulo insira o seguinte código :

'define a string de conexão com o SQL Server : base de dados TesteWind (Nothwind)
Public strconexaoSQL As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\teste\Northwind.mdb"

'define as variáveis objeto para conexão , dataadapter , dataset
Public sqlconexao As New OleDbConnection(strconexaoSQL)
Public da As New OleDbDataAdapter
Public ds As New DataSet

Agora no evento Load do formulário vamos digitar o código abaixo:

'define o comando SQL para selecionar o codigo o nome o cargo e o pais da tabela funcionarios
Dim strSQL = "SELECT CódigoDoFuncionário, Nome From Funcionários"

'cria um novo daAdapter para a conexao
da = New OleDbDataAdapter(strSQL, sqlconexao)

'preenche o dataset - ds
da.Fill(ds, "Funcionários")

Agora no evento click do botão de comando insira o código abaixo:

Private Sub btncboFunci_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncboFunci.Click

'define uma tabela e referencia a primeira tabela que no caso é a tabela funcionarios
Dim dt As New DataTable
dt = ds.Tables("Funcionários")

'define um objeto DataRow que representa um registro da tabela
Dim dr As DataRow

' Preenche a combobox com os nomes dos funcionarios
For Each dr In dt.Rows()
   cboFunci.Items.Add(dr("Nome"))
Next

'selecione o primeiro valor
cboFunci.SelectedIndex = 0
End Sub

O resultado final é o mesmo...

Até a próxima...

Rom 3:10 como está escrito: Não há justo, nem sequer um.

Rom 3:11 Não há quem entenda; não há quem busque a Deus.

Rom 3:12 Todos se extraviaram; juntamente se fizeram inúteis. Não há quem faça o bem, não há nem um só.

Rom 3:13 A sua garganta é um sepulcro aberto; com as suas línguas tratam enganosamente; peçonha de áspides está debaixo dos seus lábios;

Rom 3:14 a sua boca está cheia de maldição e amargura.

Rom 3:15 Os seus pés são ligeiros para derramar sangue.

Rom 3:16 Nos seus caminhos há destruição e miséria;

Rom 3:17 e não conheceram o caminho da paz.

Referências:


José Carlos Macoratti