Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

malainhocf

Prencher um combobox com dados do sql server

Recommended Posts

malainhocf

Olá a todos, boa noite,

Como posso preencher um combobox em que mostra por exemplo o nome do pais mas o que ele guarda para inserção é o idpais

Mostra uma coisa mas tem o valor do id da coisa em questão

Obrigado


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
ribeiro55

Basta atribuíres o DisplayMember e o ValueMember ao nome da coluna do que queres mostrar e do valor que está por detrás, respectivamente.

Um exemplo (num form mete uma Combobox e uma label com os nomes padrão, e substituí o código por este):

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ComboBox1.DisplayMember = "Nome"
        ComboBox1.ValueMember = "ID"

        'Simular uma datatable, imaginando que vem da base de dados
        Dim DT As New DataTable
        DT.Columns.Add("ID")
        DT.Columns.Add("Nome")
        DT.Rows.Add(New Object() {1, "Zeca"})
        DT.Rows.Add(New Object() {2, "Gertrudes"})
        DT.Rows.Add(New Object() {3, "Felismina"})

        ComboBox1.DataSource = DT
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        Label1.Text = ComboBox1.SelectedValue.ToString
    End Sub
End Class

Depois, SelectedText resgata o DisplayMember e SelectedValue, o ValueMember.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
malainhocf

Olá a todos, boa tarde,

Não consegui preenchar o combobox com dados da base de dados

Depois também queria perguntar se estou a ter uma boa prática de programação com este código abaixo.

O que o evento load faz é 1º preenchar o combobox com os utilizadores. 2º preencher o datagridview com dados da base de dados

O meu código:

----------------------------------------------------------------------------------------------------------------------------------

Private Sub frmFamilias_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim connstring As String = "Data Source=.\SQLEXPRESS;AttachDbFilename='C:\sqlserver\me.mdf';" & _
  ";Integrated Security=True;User Instance=True"

        Dim conn As New SqlConnection(connstring)

        conn.Open()
        ' Aqui inicia a interação com a base de dados
        Dim sqlUtilizadores As String
        sqlUtilizadores = "select idutilizador, utilizador from me_utilizadores order by idutilizador asc"

        Dim cmd As New SqlCommand(sqlUtilizadores, conn)

        Dim dr As SqlDataReader

        dr = cmd.ExecuteReader

        cbbUtilizadores.DisplayMember = "Todos"
        cbbUtilizadores.ValueMember = 0
        While dr.Read()
            cbbUtilizadores.DisplayMember = dr.Item(1).ToString()
            cbbUtilizadores.ValueMember = CInt(dr.Item(0))
        End While

        conn.Close()
        conn = Nothing
        cmd = Nothing
        dr = Nothing

        Dim conn2 As New SqlConnection(connstring)

        conn2.Open()

        Dim sql As String
        sql = "select me_familias.idfamilia, me_familias.descricao, me_familias.idutilizador, me_utilizadores.utilizador from me_familias left outer join me_utilizadores on me_familias.idutilizador=me_utilizadores.idutilizador"

        Dim da As New SqlDataAdapter(sql, conn2)

        Dim ds As New DataSet

        da.Fill(ds)

        DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
        DataGridView1.AllowUserToAddRows = False
        DataGridView1.AllowUserToDeleteRows = False
        DataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically
        DataGridView1.MultiSelect = False
        DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect

        DataGridView1.DataSource = ds.Tables(0).DefaultView

        DataGridView1.Columns.Remove("idutilizador")
        DataGridView1.Columns(0).HeaderText = "ID"
        DataGridView1.Columns(1).HeaderText = "Familia"
        DataGridView1.Columns(2).HeaderText = "Utilizador"

        conn2.Close()
        da = Nothing
        ds = Nothing
    End Sub

-----------------------------------------------------------------------------------------------------------------------------------

1º Porque não preencheu o cambobox com dados ?

2º Estou a ter uma prática correcta de programação ?

Obrigado


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
malainhocf

Ninguém tem uma solução para mim ?

O que estou a fazer de errado porque não preenche o combobox com dados do sql server

Obrigado.


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
malainhocf

Olá a todos, boa tarde,

Já resolvi o meu problema

Usei um datasource

Eu não estava a perceber que no displaymember e no valueMember tinha que por o nome dos campos da base de dados.

Obrigado a todos que me ajudaram


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.