Avatar billede jpi Mester
25. april 2015 - 21:05 Der er 6 kommentarer og
1 løsning

Vælge værdi i Listbox

Hej

Dette er VB.NET

Jeg har en listbox, hvor jeg har en række tekster indlæst fra en database via et dataset.

Når brugeren laver en filtrering på listen vil jeg gerne have at den værdi der har været markeret inden filtreringen startede også er markeret efter filtreringen (nyt dataset indlæst), hvis værdien findes.

Her er min kode, men jeg kan ikke få det til at virke.

    Dim prevItem As Integer

    prevItem = lbCustomers.SelectedValue

    ListBox1.DataSource = ds.Tables(0)
        ListBox1.ValueMember = "Id"
        ListBox1.DisplayMember = "Text"

        If ListBox1.Items.Count < 0 Then
            If ListBox1.Items.Contains(prevItem) Then
                ListBox1.SelectedValue = prevItem
            Else
                ListBox1.SelectedIndex = 0
            End If
        End If

Den ender altid med at vælge den første i listen, dvs. linien "ListBox1.Items.Contains(prevItem)" bliver altid falsk.

Jeg har også prøvet at bruge "prevItem = lbCustomers.SelectedIndex" i stedet, men også uden resultat.
Avatar billede anri Novice
25. april 2015 - 21:10 #1
Er det ikke fordi du sætter selectedValue..  Hvis du har et item så skal du sætte selectedItem og hvis du har et index skal du sætte selectedIndex.
Avatar billede jpi Mester
25. april 2015 - 21:12 #2
Det har jeg også prøvet uden resultat.

Sidste linie i mit indlæg burde have været:
Jeg har også prøvet at bruge "prevItem = lbCustomers.SelectedItem" i stedet, men også uden resultat.
Avatar billede anri Novice
25. april 2015 - 22:01 #3
Jeg mener jeg plejer at bruge selectedIndex, det giver bare et problem hvis din datasource er ændret.
Det er måske bedre at gemme dens value og så gennemløbe alle items og sætte selected = true hvis values passer sammen.
Avatar billede jpi Mester
25. april 2015 - 22:26 #4
SelectedIndex virker ikke netop fordi datasource er ændret.

Jeg har prøvet dette:

Dim prevItem As Object

prevItem = lbCustomers.SelectedItem

For x As Integer = 0 To lbCustomers.Items.Count - 1
  If lbCustomers.Items(x) = prevItem Then
      MsgBox("")
  End If
Next


Så burgde jeg få en popup, når den findr det der er ens, men den kommer aldrig... :(
Avatar billede kalp Novice
27. april 2015 - 13:32 #5
Du burde egentlig kunne fjerne alt dette:

        If ListBox1.Items.Count < 0 Then
            If ListBox1.Items.Contains(prevItem) Then
                ListBox1.SelectedValue = prevItem
            Else
                ListBox1.SelectedIndex = 0
            End If
        End If

og blot skrive:

ListBox1.SelectedValue = prevItem;

Findes elementet ikke, så sker der ikke noget.

Første element i listen er pr. default valgt.

Jeg ville også gøre variablen til en String:

Dim prevItem As String
Avatar billede jpi Mester
29. april 2015 - 19:36 #6
Det hjalp halvvejs.
At gøre prevItem til String fik den til at vælge den rigtige.

Men hvis prevItem ikke er en værdi der er gyldig (dvs findes i listyboxen) så blev selectedValue Nothing og så var ingen værdi valgt.

Men har fået det til at virke ved at lave check på om selectedValue er Nothing og så vælge SelectedIndex = 0 (forudsat at der er noget i listboxen overhovedet.

Smid et svar så du kan få point

mvh
Avatar billede kalp Novice
29. april 2015 - 19:56 #7
Glad for at mit input kunne bruges:)
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

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