[vb.net] listbox vullen vanuit sql db

Pagina: 1
Acties:
  • 229 views sinds 30-01-2008
  • Reageer

  • scatman
  • Registratie: Januari 2004
  • Laatst online: 14:15
Ik weet hoe gegevens uit de db te halen met inline sql, maar hoe kan ik deze in een listbox laten steken? volge'nde code is maar een vb code van wat ik al heb, trekt op nog niet veel, het onderste is om een datagrid te vullen, dit lukt wel, maar zou niet weten hoe bv zulke gegevens in een listbox te steken... dank bij voorbaat
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Imports System.Data.SqlClient
Public Class Databank
    Private constr As String = "workstation id=SRV01;packet size=4096;user id=sa;data source=SRV01;initial catalog=cars;persist security info=False"
    Private objconn As New SqlConnection(constr)
    Private sqlstr As String
    Private objcmd As New SqlCommand
    Private adapter As New SqlDataAdapter
    Public Sub insert_auto(ByVal nummerplaat As String)
        objconn.Open()
        'sqlstr = "insert into Auto(Auto_Nrplaat,Type_ID,Auto_Kleur,Auto_Aantalzitplaatsen,Auto_Motorisatie,Auto_Brandstof,Auto_Kmonderhoud,Auto_Kmstand,Status_ID,Typekost_ID) values(' "& nummerplaat &"','"1,'blauw',5,'1900TDI','diesel',50000,40,1,1)
        'sqlstr = "insert into Auto (auto_nrplaat) values ('" & nummerplaat & "')"
        sqlstr = "insert into Auto (auto_nrplaat, type_id, status_id,typekost_id, auto_kmstand, auto_kmonderhoud, auto_aantalzitplaatsen,auto_kleur, auto_motorisatie, auto_brandstof) values ('" & nummerplaat & "',2,3,2,123,5000,3,'paars','2800tdi','euro98')"
        objcmd.CommandText = sqlstr
        objcmd.Connection = objconn
        objcmd.ExecuteNonQuery()
        MsgBox("Nieuwe auto succesvol toegevoegd!")
    End Sub
    'public sub delete_auto(
    Public Sub load_auto()
        sqlstr = "select auto.Auto_ID, merk.Merk_naam, type.type_naam, auto.auto_kleur, auto.auto_aantalzitplaatsen, auto.auto_motorisatie, auto.auto_brandstof, auto.auto_kmonderhoud, auto.auto_kmstand from Auto, Type, Merk where auto.type_ID=type.type_ID and merk.Merk_ID=type.Merk_ID"
        Dim adapter As New SqlDataAdapter(sqlstr, objconn)
        Dim ds As DataSet = New DataSet
        adapter.Fill(ds, "Auto")
        adapter.Dispose()
        objconn.Close()
        Dim table As DataTable = ds.Tables(0)
        Dim frmView As New formulier_auto_view
        frmView.DataGrid1.DataSource = table
        frmView.ShowDialog()
    End Sub
End Class

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Een listbox heeft ook een DataSource. Voor de rest zou ik eens in de msdn kijken want het is eigenlijk nogal basic stuff.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Inderdaad, je kunt aan een listbox een datasource hangen, bv. een array of een table uit een dataset. Even googlen dus en je hebt je antwoord zo gevonden :).

[ Voor 4% gewijzigd door Verwijderd op 21-10-2005 02:10 ]


  • scatman
  • Registratie: Januari 2004
  • Laatst online: 14:15
na wat zoeken heb ik het volgende gevonden:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Imports System.Data.SqlClient
Public Class Databank
    Private constr As String = "workstation id=SRV01;packet size=4096;user id=sa;data source=SRV01;initial catalog=cars;persist security info=False"
    Private objconn As New SqlConnection(constr)
    Private sqlstr As String
    Private objcmd As New SqlCommand
    Private adapter As New SqlDataAdapter
    Public Function load_merk()
        sqlstr = "select distinct(merk_naam) from merk"
        Dim adapter As New SqlDataAdapter(sqlstr, objconn)
        Dim ds As DataSet = New DataSet
        adapter.Fill(ds, "Merk")
        adapter.Dispose()
        objconn.Close()
        Dim table As DataTable = ds.Tables(0)
        Return (table)
    End Function
End Class
code:
1
2
3
4
5
6
Public Class formulier_auto_toevoegen
    Inherits System.Windows.Forms.Form
    Dim db As New Databank
    Private Sub formulier_update_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.ListBox1.DataSource = db.load_merk()
    End Sub


De bedoeling is dat ik bij het laden van dat bepaalde formulier de merken van de auto's uit de databank ga listen in de listbox, probleem is nu dat bij het laden van het formulier hij wel het juiste aantal waarden meegeeft (bv. 6 merken in db -> 6 iterms in listbox) maar de waarden in listbox zijn allemaal 'system.data.datarowview' en niet bv. opel - volkswagen - mercedes ...

ik heb al gegoogled zoals jullie me aanraden, gezocht op msdn, maar krijg het echt niet opgelost, iemand die enige help zou kunnen bieden? alvast bedankt

  • sig69
  • Registratie: Mei 2002
  • Nu online
Probeer de displaymember eens te setten:
code:
1
Me.ListBox1.DisplayMember = "kolomnaam"

[ Voor 16% gewijzigd door sig69 op 24-10-2005 14:54 ]

Roomba E5 te koop


Verwijderd

Doe het eens zo:
(is wel c#, VB ken ik niet goed)
code:
1
2
3
foreach (DataRow in db.load_merk()) {
  Me.ListBox1.Items.Add(new ListBoxItem(db.load_merk["merk"]);
}

ipv die regel met datasource. Dit is niet de netste manier, maar het werkt wel :) De kolom is dus "merk", dat heb ik zelf verzonnen.
sig69 schreef op maandag 24 oktober 2005 @ 14:54:
Probeer de displaymember eens te setten:
code:
1
Me.ListBox1.DisplayMember = "kolomnaam"
Volgens mij bestaat die property niet... Bedoel je niet DataValueField?

[ Voor 34% gewijzigd door Verwijderd op 24-10-2005 14:56 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:58
werken met datasource/displaymember is perfect valide.

https://fgheysels.github.io/


  • scatman
  • Registratie: Januari 2004
  • Laatst online: 14:15
heb nog wat geprobeerd en het rare is met juist zelfde code voor datagrid werkt het wel, maar voor listbox niet (let niet op gui pls)
Afbeeldingslocatie: http://users.skynet.be/fa009166/raar.JPG

en dus als code bij het laden van het formulier:
code:
1
2
3
4
5
6
7
Public Class formulier_auto_toevoegen
    Inherits System.Windows.Forms.Form
    Dim db As New Databank
    Private Sub formulier_update_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.ListBox1.DataSource = db.load_merk()
        Me.DataGrid1.DataSource= db.load_merk()
    End Sub

iemand enig idéé hoe je dit kan oplossen, iets met een tostring functie ofzo? de functie zelf werkt dus wel degelijk en het lijkt me te liggen bij eigenschappen van de listbox...

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:58
Zoals hier reeds gezegd is:
Gebruik de DisplayMember property van de listbox (een datagrid is een control die in staat is om meerdere 'columns' te tonen, en toont dus gewoon alles wat in de datasource zit).
Een ListBox kan dat niet, en weet dus niet wat hij moet tonen, dus, doet die gewoon een 'ToString()' om de data te verkrijgen. ToString returned in het geval van een DataRowView dus gewoon z'n type.

Nog eens: gebruik de DisplayMember, en de MSDN.

[rml]sig69 in "[ vb.net] listbox vullen vanuit sql db"[/rml]
[rml]whoami in "[ vb.net] listbox vullen vanuit sql db"[/rml]

[ Voor 14% gewijzigd door whoami op 24-10-2005 15:51 ]

https://fgheysels.github.io/


  • scatman
  • Registratie: Januari 2004
  • Laatst online: 14:15
whoami schreef op maandag 24 oktober 2005 @ 15:49:
Zoals hier reeds gezegd is:
Gebruik de DisplayMember property van de listbox (een datagrid is een control die in staat is om meerdere 'columns' te tonen, en toont dus gewoon alles wat in de datasource zit).
Een ListBox kan dat niet, en weet dus niet wat hij moet tonen, dus, doet die gewoon een 'ToString()' om de data te verkrijgen. ToString returned in het geval van een DataRowView dus gewoon z'n type.

Nog eens: gebruik de DisplayMember, en de MSDN.
bedankt dit bleek het te zijn:
Me.ListBox1.DisplayMember = "merk_naam"

hartelijk bedankt voor de hulp en het geduld

[ Voor 18% gewijzigd door scatman op 24-10-2005 15:59 ]

Pagina: 1