[vb] Item in DataList selecteren n.a.v. zoekactie in Textbox

Pagina: 1
Acties:

  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Op een VB-formulier staat een DataList (Listbox voor het weergeven van records uit een database) met daarboven een Textbox. Nu is het de bedoeling dat ik via de textbox items kan zoeken in de datalist. Als een item is gevonden moet deze automatich geselecteerd worden.

Nu laat ik op een key_up event in de textbox een SQL-query uitvoeren die alle waardes die niet aan de zoekterm voldoen er uit filtert. Ik wil echter dat alle items in de datalist blijven staan en dat de datalist als ik een 'a' intyp naar het eerste item met een 'a' springt.

Huidige situatie:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub txtSearch_KeyUp(KeyCode As Integer, Shift As Integer)
     Dim sNaam As String
     Dim sSQL2 As String
    
      sNaam = txtSearch.Text
    
      If txtSearch = "" Then
            sSQL2 = "SELECT * FROM Debiteuren ORDER BY Naam"
      Else:
            sSQL2 = "SELECT * FROM Debiteuren WHERE Naam LIKE '" & sNaam & "%' ORDER BY Naam"
      End If

      Adodc1.CommandType = adCmdText
      Adodc1.RecordSource = sSQL2
      Adodc1.Refresh
End Sub


Hij moet eigenlijk net zo reageren als de help-index van windows. Is daar eigenlijk geen componentje voor?

  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Ik heb het net geprobeerd met een DataCombo (Combobox voor weergave van records in database) met invoervak. Het zou dan de bedoeling zijn dat als ik wat intyp in de datacombo dat het item wat aan de zoekcriteria voldoet automatisch geselecteerd wordt. Ook dit krijg ik niet voor elkaar. Ik las op MSDN over de SelectedItem property. Ik krijg dit echter niet aan de gang.

Verwijderd

Stel je hebt een combobox met waardes. En die heet cboIntern.

code:
1
2
3
4
Private Sub cboIntern_Change()
' Het change event van de combo box wordt gebruikt om de search sub aan te roepen
    ComboSearch cboIntern
End Sub


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
Public Sub ComboSearch(box As ComboBox)
Dim intBoxIndex, intPosCursor As Integer, strText As String, bExst As Boolean
' Deze Sub wordt gebruikt voor alphabetisch zoeken naar de overeenkomstige
' waarde in de combo box en plaatst deze in de combo text.
    
    strText = box.Text
    intPosCursor = box.SelStart
    ' Als de cursor niet aan het begin staat van de checkbox dan...
    If intPosCursor <> 0 Then
        bExst = False
        ' Ga in een lus door de box list om de juiste bijbehorende entry te vinden in de lijst
        For intBoxIndex = 0 To box.ListCount - 1
            If UCase(Left(box.List(intBoxIndex), intPosCursor)) = UCase(Left(strText, intPosCursor)) Then
                box.Text = box.List(intBoxIndex)
                box.SelStart = intPosCursor
                bExst = True
                Exit For
            End If
        Next
        ' Als de juiste waarde niet gevonden wordt dan wordt de vorige value terug gegeven aan de text box
        If Not bExst Then
            box.Text = Left(strText, intPosCursor - 1) + Mid(strText, intPosCursor + 1)
            box.SelStart = intPosCursor - 1
        End If
    End If
End Sub


dit is denk ik wat je zoekt.

  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Verwijderd schreef op 13 October 2003 @ 14:35:
Stel je hebt een combobox met waardes. En die heet cboIntern.

code:
1
2
3
4
Private Sub cboIntern_Change()
' Het change event van de combo box wordt gebruikt om de search sub aan te roepen
    ComboSearch cboIntern
End Sub


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
Public Sub ComboSearch(box As ComboBox)
Dim intBoxIndex, intPosCursor As Integer, strText As String, bExst As Boolean
' Deze Sub wordt gebruikt voor alphabetisch zoeken naar de overeenkomstige
' waarde in de combo box en plaatst deze in de combo text.
    
    strText = box.Text
    intPosCursor = box.SelStart
    ' Als de cursor niet aan het begin staat van de checkbox dan...
    If intPosCursor <> 0 Then
        bExst = False
        ' Ga in een lus door de box list om de juiste bijbehorende entry te vinden in de lijst
        For intBoxIndex = 0 To box.ListCount - 1
            If UCase(Left(box.List(intBoxIndex), intPosCursor)) = UCase(Left(strText, intPosCursor)) Then
                box.Text = box.List(intBoxIndex)
                box.SelStart = intPosCursor
                bExst = True
                Exit For
            End If
        Next
        ' Als de juiste waarde niet gevonden wordt dan wordt de vorige value terug gegeven aan de text box
        If Not bExst Then
            box.Text = Left(strText, intPosCursor - 1) + Mid(strText, intPosCursor + 1)
            box.SelStart = intPosCursor - 1
        End If
    End If
End Sub


dit is denk ik wat je zoekt.
Ik bedoel het eigenlijk andersom. Als ik een letter typ moet dit niet direct aangevuld worden uit de combobox maar de eerste waarde die met de letter begint moet geselecteerd worden. Als ik de 2e letter typ moet de eerste waarde geselecteerd worden die met de eerste 2 letters begint.

Verwijderd

dat kan niet moeilijk meer zijn vanuit mijn code voorbeeld, klein beetje zelf typen kan geen kwaad. Ik snap trouwens niet precies wat je bedoeld.

Stel je hebt de waarde:
overbeet
overzee

en je typt in mijn voorbeeld over in dan maakt hij het af met overbeet maar als je gewoon doortypt dus ook nog de letter z plaatst dan maakt hij daar gewoon overzee van en haald zelf de andere waarde weg.

[ Voor 61% gewijzigd door Verwijderd op 13-10-2003 19:39 ]


  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Verwijderd schreef op 13 October 2003 @ 19:32:
dat kan niet moeilijk meer zijn vanuit mijn code voorbeeld, klein beetje zelf typen kan geen kwaad. Ik snap trouwens niet precies wat je bedoeld.

Stel je hebt de waarde:
overbeet
overzee

en je typt in mijn voorbeeld over in dan maakt hij het af met overbeet maar als je gewoon doortypt dus ook nog de letter z plaatst dan maakt hij daar gewoon overzee van en haald zelf de andere waarde weg.
Kijk eens naar de Windows Help-Index, zo wil ik het graag.........het item moet dus geselecteerd worden in de list als je een letter typt.

Ik heb jouw code wel geprobeerd. Ziet er erg logisch uit en werkt ook, het is alleen niet precies wat ik bedoel...

[ Voor 9% gewijzigd door EmilneM op 13-10-2003 20:19 ]


  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Het lukt me maar niet om een item in een datalist of datacombo te selecteren vanuit een textbox. Kan de juiste property niet vinden, dacht dat het met DataList1.SelectedItem zou werken maar volgens MSDN is dat alleen maar om een item te bookmarken.
Pagina: 1