Avatar billede skelboe Nybegynder
10. januar 2006 - 11:33 Der er 8 kommentarer og
1 løsning

ListBox Item og DisplayMember

Jeg udfylder en ListBox med ting fra en database, og udfylder items sådan her

While rs.Read
ListBox.Items.Add(rs(0))

Men hvordan udfylder jeg dens value
Avatar billede bernhof Nybegynder
10. januar 2006 - 16:57 #1
I Visual Basic .NET Windows applikationer, er der ikke noget der hedder ValueMember og DisplayMember, som der vist nok er i ASP.NET.

Istedet skal du selv opbygge en klasse, som kan indeholde de ønskede værdier.

Eks:

  Public Class MyListItem
    Public Value As String
    Public Text As String

    Public Sub New(Text As String, Value As String)
      Me.Text  = Text
      Me.Value = Value
    End Sub

    Public Overrides Function ToString() As String
      Return Text
    End Function
  End Class

Når du udfylder din listbox skriver du nu istedet:

  Dim ListItem As New MyListItem(rs(0), rs(1))
  ListBox.Items.Add(ListItem)
Avatar billede bernhof Nybegynder
10. januar 2006 - 17:06 #2
Når du på et senere tidspunkt skal have fat i den gemte value for et givent list item, så skriver du fx således:

  Dim ListItem As MyListItem
  ListItem = CType(ListBox.Items(23), MyListItem)
  MessageBox.Show(ListItem.Value)
Avatar billede skelboe Nybegynder
11. januar 2006 - 09:17 #3
Der findes displaymember og valuemember, men den eneste måde jeg ved at bruge det på er hvis man bruge VB2005's databindings...
Avatar billede bernhof Nybegynder
11. januar 2006 - 20:20 #4
Det er også rigtigt. Min fejl.

Jeg mener ikke du kan databinde direkte på en datareader, men du kan med en datatable, som fx i nedenstående eksempel:

Dim DA As New SqlClient.SqlDataAdapter("SELECT * FROM Tabel", "<ConnectionString>")
Dim DT As New DataTable("Tabel")
DA.Fill(DT)
ListBox.ValueMember = "NavnPåKolonne1"
ListBox.DisplayMember = "NavnPåKolonne2"
ListBox.DataSource = DT
Avatar billede skelboe Nybegynder
12. januar 2006 - 08:58 #5
Jeg bruger jo access db så jeg ved ikke helt hvordan det skal se ud...
Avatar billede skelboe Nybegynder
12. januar 2006 - 09:21 #6
Smid et svar
for det virker helt perfekt
Avatar billede skelboe Nybegynder
12. januar 2006 - 09:34 #7
Kan man godt sætte flere ting på displaymember som "Kolonne2" & " : " & "Kolonne2"
Avatar billede bernhof Nybegynder
12. januar 2006 - 10:44 #8
Fandt du ud af det? Hvis du kører access skal du bare bruge OleDb.OleDbDataAdapter istedet :)

Nej, du kan såvidt jeg ved ikke lægge flere kolonner i DisplayMember, men istedet kan du jo, når du henter data fra databasen, lave sammensætningen af de to kolonner der, for eksempel:

  SELECT (Kolonne1 & ' : ' & Kolonne2) As NytFelt FROM Tabel1

Og derefter sætter du displaymember:

  ListBox.DisplayMember = "NytFelt"

Det har samme effekt.
Avatar billede tubber Juniormester
10. februar 2010 - 22:03 #9
noget nemmere er det med:

Imports System.Web.UI.WebControls

-

Dim myText As String = rs(1)
Dim myValue As Integer = rs(0)
ListBox1.Items.Add(New ListItem(myText, myValue))

-

For at hente value:
ListBox1.SelectedItem.Value
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester