Zoeken in ListBox

Status
Niet open voor verdere reacties.

Tariq

Gebruiker
Lid geworden
27 okt 2008
Berichten
109
Beste Helpmij.nl,

Ik zit met een programma waarin ik een listbox heb. Naarmate je het programma gebruikt zal de listbox voller komen te zitten met informate. (bijv. een soort telefoonboek)

Nou leek het mij handig om een zoek functie erbij te hebben. Bijvoorbeeld als je iemands naam niet meer precies weet :o of omdat het anders uren scrollen wordt.

Ik heb wat zitten klieren met de code maar niets werkte. Zoeken op google leverde mij niets op.

Zouden jullie mij kunnen helpen om dit plan te voltooien?

Ik wil dus graag dat je in Textbox1 je woord typt en in listbox1 de match vind. En alles wat niet matched even niet laat zien, maar zodra je het weghaald wel weer kan zien.

Alvast bedankt,

Tariq
 
Ben je aan het programmeren in Visual basic?
Kun je even de code sturen (van het hele form)?
En een screenshot van de designer sturen?
 
Laatst bewerkt:
Dit is de code van Form1 (wist niet precies welk deel je nodig had.)

Code:
Public Class Form1
    Private m_cnADONetConnection As New OleDb.OleDbConnection()
    Private m_daDataAdapter As OleDb.OleDbDataAdapter
    Private m_cbCommandBuilder As OleDb.OleDbCommandBuilder
    Private m_dtContacts As New DataTable
    Private m_rowPosition As Integer = 0
    Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        m_cnADONetConnection.Close()
        m_cnADONetConnection.Dispose()
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Form3.Show()
    End Sub

    Private Sub ShowCurrentRecord()
        If m_dtContacts.Rows.Count = 0 Then
            TextBox1.Text = ""
            RichTextBox1.Text = ""
            Exit Sub
        End If
        TextBox1.Text = _
           m_dtContacts.Rows(m_rowPosition)("ContactName").ToString()
        RichTextBox1.Text = _
           m_dtContacts.Rows(m_rowPosition)("State").ToString()
    End Sub

    Private Sub ShowAllContacts()

        For Each objRow In m_dtContacts.Rows
            ListBox1.Items.Add(objRow("ContactName").ToString())

        Next objRow

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.BackColor = My.Settings.backgroundcolor
        Me.ForeColor = My.Settings.textcolor
        Button1.BackColor = My.Settings.buttoncolor
        Button2.BackColor = My.Settings.buttoncolor
        Dim cnADONetConnection As New OleDb.OleDbConnection()

        m_cnADONetConnection.ConnectionString = _
      "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\Contacts.mdb"

        m_cnADONetConnection.Open()

        m_daDataAdapter = New OleDb.OleDbDataAdapter("Select * From Contacts", m_cnADONetConnection)

        m_cbCommandBuilder = New OleDb.OleDbCommandBuilder(m_daDataAdapter)

        m_daDataAdapter.Fill(m_dtContacts)

        Me.ShowCurrentRecord()
        Me.ShowAllContacts()
    End Sub

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        TextBox1.Text = ListBox1.SelectedItem
        RichTextBox1.Text = m_dtContacts.Rows(m_rowPosition)("State").ToString()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Form4.Show()
    End Sub
End Class
 

Bijlagen

  • Knipsel.PNG
    Knipsel.PNG
    28,3 KB · Weergaven: 57
In principe werkt dit makkelijker in Excel.
Het nadeel is dat dit een klein, maar essentieel deel is van een programma. De Listbox zal gevuld worden met (uiteindelijk) meer dan 20.000 items. Zelf voor Excel is dat veel. De formule van Excel zal dan nog wel werken, maar ik had het graag in het programma willen integreren.
 
Maak een zoek query in je database

SELECT Fotonummer
FROM Artikelen
WHERE (Fotonummer LIKE @Fotonummer + '%') ORDER BY Fotonummer
 
Ok, old Hippy,

Ik ben je even kwijt. Wat zou ik dan precies moeten doen? Ik ben niet zo erg bekend met Databases ik ken alleen de basis om een verbinding te maken, dingen toe te voegen/verwijderen/bewerken. Meer eigenlijk niet.

Ik werk met een Office Acces 2000 bestand (.mdb)

Welke stappen moet ik ondernemen om een zoek query te maken?
 
Oeps ik dacht dat je met een sql db werkte.
met een sql van uit vb2008 kan ik je wel op weg helpen.

ik weet niet hoe je met een office moet werken.
maar in Acces kan je een zoek query maken en die in vb aan roepen.
waardoor je kan zoeken in je DB

Mischien kan dit bestandje je helpen???
inde bin dir zit een Acces db

Of hopelijk kan iemand je helpen.
 

Bijlagen

Laatst bewerkt:
Ok, old Hippy.

heel erg bedankt. Je voorbeeld werkt. Alleen moet ik even zoeken hoe ik dit om moet zetten voor Acces. De Database heb ik met redelijk wat code geopend en alles, dat werkt nu ook goed zoals ik wil. Ik had gehoopt daarmee verder te kunnen.

Of kan ik op deze manier ook alles in een listbox proppen?
 
Volgens mij wel want zoeken doe je database je listbox laat aleen maar het reseltaat zien
groetjes Old hippy

en een happy new year
 
Ok, jij ook nog een gelukkig nieuwjaar.

Bedankt voor de reacties. Ik ga nog even verder kijken hoe ik dit moet doen.
 
Ok, dat wilt best lukken nu. (DataGridView)

Alleen wil ik graag alleen 'Naam' 'Achternaam' en 'Straat' in de tabel hebben staan. ID wil ik dus niet zien.

Ook zou ik graag willen weten wat ik moet doen om als er op 'Naam' geklikt wordt dat er dan uit de tabel 'Straat' verplaatst wordt naar RichTextBox1. (In de tabel zie je dan alleen 'Naam' en 'Achternaam'.)

Er zit ook een klein beige balkje aan de linkerkant naast 'ID'. Enig idee hoe ik dat weg moet krijgen.
 
Het grijze vakje set DataGridView1.RowHeadersVisible=False
Met de rest kan ik je niet helpen
ik weet niets van Acces batabase
mischien een afbeelding van je form helpt zoms
 
Het heeft volgens mij meer te maken mte visual basic.

Want ik heb de data in de DataGridView. (Naam+Achternaam+Straat)
Vanwege beperkingen en grootte laat ik alleen (Naam+Achternaam) zien.
Dus zodra er op Bijv. Hans wordt geklikt wil ik dat zijn naam, achternaam en straatnaam in RichTextBox1.Text worden geplaatst.

Ik dacht iets van (dubbelgeklikt op DataGridView1)
Code:
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
        RichTextBox1.Text = DataGridView1.SelectedCells.ToString()
        RichTextBox1.Text = RichTextBox1.Text + " " + DataGridView1.SelectedCells.Achternaam.ToString()
        RichTextBox1.Text = RichTextBox1.Text + " " + DataGridView1.SelectedCells.Straatnaam.ToString()
    End Sub

Maar dit werkt niet :P
 
Mischien + werkt zo niet
Code:
  RichTextBox1.Text = RichTextBox1.Text [COLOR="Red"]&[/COLOR] " " [COLOR="red"]&[/COLOR] DataGridView1.SelectedCells.Achternaam.ToString()
        RichTextBox1.Text = RichTextBox1.Text [COLOR="red"]&[/COLOR] " " [COLOR="red"]&[/COLOR] DataGridView1.SelectedCells.Straatnaam.ToString()
 
Nee, met & werkt het ook niet.

Wel heb ik gevonden hoe ik de x- en y-waarde van de cel kan vinden, de row plaats in de grid view. Maar wat mij niet lukt is om die waarde over te zetten naar een (Rich)TextBox. Enig idee hoe dat moet?

Ik zou ook graag de voorste kolom ("Id") niet in zicht willen hebben in de DataGridView. Enig idee hoe dat moet?

Dan ben ik wel weer bijna klaar.

Edit: Ik ben verder gegaan met het aanvullen van het nieuwe project. Ik stuit op het volgende probleem:
De oude code om de database mee aan te vullen/bewerken werkt niet met de nieuwe DataBase. (logish, andere code)

Heb je misschien ook de code waarmee ik jouw database kan bewerken/waarden toevoegen (via een form)

Code:
Public Class AddWord
    Private m_cnADONetConnection As New OleDb.OleDbConnection()
    Private m_daDataAdapter As OleDb.OleDbDataAdapter
    Private m_cbCommandBuilder As OleDb.OleDbCommandBuilder
    Private m_dtContacts As New DataTable
    Private m_rowPosition As Integer = 0
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text = "" Or TextBox2.Text = "" Then
            MsgBox("Please fill in a word.")
        Else
            Dim drNewRow As DataRow = m_dtContacts.NewRow()
            drNewRow("Naam") = TextBox1.Text
            drNewRow("Achternaam") = TextBox2.Text
            'drNewRow("Straatnaam") = RichTextBox1.Text
            m_dtContacts.Rows.Add(drNewRow)
            m_daDataAdapter.Update(m_dtContacts)
            m_rowPosition = m_dtContacts.Rows.Count - 1

            Form1.Haal_SQL_Query_Op()

        End If
    End Sub

    Private Sub Form4_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        m_cnADONetConnection.Close()
        m_cnADONetConnection.Dispose()
    End Sub

    Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.BackColor = My.Settings.bc
        Me.ForeColor = My.Settings.tc
        Button1.BackColor = My.Settings.buc
        Button2.BackColor = My.Settings.buc
        Dim cnADONetConnection As New OleDb.OleDbConnection()

        m_cnADONetConnection.ConnectionString = _
      "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb"

        m_cnADONetConnection.Open()

        m_daDataAdapter = New OleDb.OleDbDataAdapter("Select * From Adresgegevens", m_cnADONetConnection)

        m_cbCommandBuilder = New OleDb.OleDbCommandBuilder(m_daDataAdapter)

        m_daDataAdapter.Fill(m_dtContacts)

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If m_dtContacts.Rows.Count <> 0 Then
            m_dtContacts.Rows(m_rowPosition)("Naam") = TextBox1.Text
            m_dtContacts.Rows(m_rowPosition)("Achternaam") = TextBox2.Text
            ' m_dtContacts.Rows(m_rowPosition)("Straatnaam") = RichTextBox1.Text
            m_daDataAdapter.Update(m_dtContacts)

            Form1.Haal_SQL_Query_Op()

        End If
    End Sub

End Class

Dit is wat ik nu als code had staan in mijn 'vorige' project. Op de plaats van Form1.Haal_SQL_Query_Op() stond eerst nog andere code, maar ik was tot hier gekomen.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan