login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Zoekopdracht met timer en textbox (Opgelost)

Offline SICKBOYYYYY - 04/02/2010 14:06 (laatste wijziging 05/02/2010 09:04)
Avatar van SICKBOYYYYYLid Ik ben al een paar uur aan het zoeken op dit De bedoeling is dat ik in mijn zoektextbox tekst zal invoeren, met behulp van een timer heb ik een interval van 500ms tussen de ingevoerde gegevens en de zoekopdracht in de datagrid.

Wanneer ik mijn tekst invoer in mijn tekstbox, verkleurd de achtergrond van mijn tekst box rood (hij is aan het zoeken in de datagrid naar de gezochte termen), de tekstbox kleurt terug wit als de zoekopdracht gedaan is en de datagrid alle 'info' vindt met de waarde die ik opzocht

Voor de timer heb ik al iets geprobeerd, maar niets blijkt te werken:


  1. Private sub Timer1_Timer()
  2. Timer1.Enabled = txtzoeken.TextLength > 0
  3. If Timer1.Enabled = True Then
  4. txtzoeken.BackColor = Color.Red
  5. Else
  6. txtzoeken.BackColor = Color.White
  7. End If
  8. End Sub


_________
  1. Private Sub TimerTick()
  2. Timer1.Enabled = False
  3. Timer1.Interval = 500
  4. Timer1.Enabled = True
  5. 'zoek
  6. End Sub


Zou iemand mij kunnen verderhelpen?

10 antwoorden

Gesponsorde links
Offline Mario - 04/02/2010 15:05
Avatar van Mario Crew algemeen Waarom niet met het change event van je textbox werken ?

  1. Private Sub txtzoeken_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtzoeken.TextChanged
  2. If txtzoeken.TextLength > 0 Then txtzoeken.BackColor = Color.Red Else txtzoeken.BackColor = Color.White
  3. End Sub
Offline SICKBOYYYYY - 04/02/2010 16:07 (laatste wijziging 04/02/2010 16:17)
Avatar van SICKBOYYYYY Lid Hey, zover zit ik ondertussen ook, maar hoe kan ik nu via deze tekstbox heel mijn datagridview gaan filteren, dus als ik bv 'Th' invoer, filter hij heel de datagrid en laat hij alleen de records tonen waarin 'Th' invoorkomt?

Programming in VB.NET 2008 wel te verstaan*, ik ben echt teneinde raad betreffende dit, dit lijkt echt zoiets dat veelzijdig gebruikt wordt, maar vind echt nergens de juiste informatie!

Alvast bedankt!
Offline Abbas - 05/02/2010 00:01 (laatste wijziging 05/02/2010 00:06)
Avatar van Abbas Gouden medaille

Crew .NET
Zorg dat in je FormLoad je DataGrid gevuld wordt aan de hand van een DataTable. Declareer je DataTable buiten je FormLoad event:

  1. Dim originalTable As New DataTable("NaamDataTable")

In het TextChanged event van je TextBox plaats je dan volgende code:

  1. If String.IsNullOrEmpty(txtZoekvak.Text) Then
  2. uwDataGrid.DataSource = originalTable
  3. Else
  4. Dim filterView As New DataView(originalTable)
  5. filterView.RowFilter = "Kolomnaam = '" & txtZoekvak.Text & "' "
  6. uwDataGrid.DataSource = filterView
  7. End If

In je FormLoad event moet je dan enkel de code nog voorzien om je DataTable (originalTable) te vullen met gegevens en dan ook de DataSource van je DataGrid in te stellen op die DataTable.
Offline SICKBOYYYYY - 05/02/2010 09:00 (laatste wijziging 05/02/2010 09:03)
Avatar van SICKBOYYYYY Lid Het probleem is, dat het programma reeds zeer uitgebreid is en dat ik mijn form_load event al bij andere functies heb toegepast. Ik kan met andere woorden mijn DataSource van mijn Datagrid niet meer instellen op mijn DataTable?

Of vergis ik mij?

alvast bedankt
  1. Private Sub txtzoeken_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtzoeken.TextChanged
  2. Dim originalTable As New DataTable("originalTable")
  3. If txtzoeken.TextLength > 0 Then txtzoeken.BackColor = Color.Red Else txtzoeken.BackColor = Color.White
  4. If String.IsNullOrEmpty(txtzoeken.Text) Then
  5. DataGridView1.DataSource = originalTable
  6. Else
  7. Dim filterView As New DataView(originalTable)
  8. filterView.RowFilter = "Kolomnaam = '" & txtzoeken.Text & "'"
  9. DataGridView1.DataSource = filterView
  10. End If
  11. End Sub
Offline Abbas - 05/02/2010 10:51
Avatar van Abbas Gouden medaille

Crew .NET
Waarom zou dit niet kunnen? Anders geef eens wat code.. ;) Nu is het gokken naar hoe het eruit ziet..
Offline SICKBOYYYYY - 05/02/2010 13:56 (laatste wijziging 05/02/2010 14:38)
Avatar van SICKBOYYYYY Lid In de volgende code kun je zien hoe ik mijn database aanspreek om mijn datagrid te vullen met de nodige informatie + hoe ik mijn datagrid ga aanspreken:

  1. Public Sub Vul_Datagrid()
  2. OleDbConnection.Open()
  3. Dim odr_PCB As OleDb.OleDbDataReader
  4. OleDbCommand.CommandText = strSQL
  5. odr_PCB = OleDbCommand.ExecuteReader()
  6. Dim dt As New System.Data.DataTable
  7. dt.Load(odr_PCB)
  8. DataGridView1.DataSource = dt
  9. odr_PCB.Close()
  10. OleDbConnection.Close()
  11. End Sub
  12. Private Sub txtzoeken_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtzoeken.TextChanged
  13. Dim strzoeken As String
  14. strzoeken = CStr(txtzoeken.Text)
  15.  
  16. DataGridView1.DataSource = ds
  17. Dim filterView As New DataView
  18. filterView.RowFilter = "PCB_ID <> '" & strzoeken & "'"
  19. DataGridView1.DataSource = filterView
  20. Vul_Datagrid()
  21.  
  22. End Sub


textzoeken_TextChanged --> heb voorlopig die RowFilter op PCB_ID staan, maar hij zou moeten gaan zoeken in heel mijn datagrid in elk veld maw, en alleen diegene tonen waar mijn 'strzoeken' instaat. Ik maak dus ook gebruik van een dataset, maar kon je al afleiden uit de coding!

alvast bedankt!
Offline Abbas - 05/02/2010 17:22
Avatar van Abbas Gouden medaille

Crew .NET
Zo dan he:

  1. Dim originalTable As New DataTable()
  2. Dim strSQL = "SELECT ..."
  3.  
  4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  5.  
  6. 'Doe vanalles
  7. VulDataGrid()
  8. DataGridView1.DataSource = originalTable
  9.  
  10. End Sub
  11.  
  12. Private Sub VulDataGrid()
  13.  
  14. OleDbConnection.Open()
  15. Dim odr_PCB As OleDb.OleDbDataReader
  16. OleDbCommand.CommandText = strSQL
  17. odr_PCB = OleDbCommand.ExecuteReader()
  18. originalTable.Load(odr_PCB)
  19. odr_PCB.Close()
  20. OleDbConnection.Close()
  21.  
  22. End Sub
  23.  
  24. Private Sub txtzoeken_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtzoeken.TextChanged
  25.  
  26. If String.IsNullOrEmpty(txtzoeken.Text) Then
  27. DataGridView1.DataSource = originalTable
  28. Else
  29. Dim filterView As New DataView(originalTable)
  30. filterView.RowFilter = "PCB_ID <> '" & txtzoeken.Text & "' "
  31. DataGridView1.DataSource = filterView
  32. End If
  33.  
  34. End Sub
Offline SICKBOYYYYY - 08/02/2010 08:53 (laatste wijziging 08/02/2010 16:55)
Avatar van SICKBOYYYYY Lid Heb er zelf iets op gevonden:
  1. Private Sub txtfilter_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtfilter.TextChanged
  2. strSQL = "SELECT * FROM PCB WHERE PCB_Bedrijf like '%" & txtfilter.Text & "%'"
  3. Vul_Datagrid()
  4. End Sub


Op deze manier gaat hij wel eenvoudig filteren en op de juiste manier, maar nu zit ik met het volgende probleem! In dit geval filter ik alleen op PCB_Bedrijf --> nu wil ik eigenlijk gaan filteren over heel mijn datagrid! Dus bedacht ik het volgende:

Als ik nu de inhoud van al mijn kolommen op de een of andere manier in 1 bijgevoegde kolom kan krijgen (die ik dan niet laat zien in mijn datagrid. Dan kan ik wel over heel het veld gaan filteren en dan toont hij alleen die records waar hij positive match heeft gevonden?

Voorbeeld:
ik heb in de kolommen A, B, C, D allemaal waarden staan die ik wil samenvoegen in kolom E, er wordt niet opgeteld. In E moet komen te staan ACDB.

--> In A staat een 1, in B een 6, in C een 7 en in D een 8. In E moet dus 1786 (ACDB) komen te staan.

UPDATE*

  1. strHoogsteID = "SELECT PCB_ID FROM PCB ORDER BY PCB_ID DESC LIMIT 0,1"
  2. strSQL = "UPDATE PCB SET PCB_FILTER='" & txtbedrijfsnaam.Text & txtmerk.Text & txttype.Text & txtserienummer.Text & txtos.Text & txtgebruiker.Text & txtgelabeld.Text & txtvernietigd.Text & "' WHERE PCB_ID ='" & strHoogsteID & "';"
  3. OleDbCommand.CommandText = strSQL
  4. OleDbCommand.ExecuteNonQuery()


Data Type Mismatch = ERROR

Offline Abbas - 08/02/2010 22:17
Avatar van Abbas Gouden medaille

Crew .NET
Is PCB_ID van het type integer? Want in je update-query staat de variabele als een string. En die ';' mag ook weg:

  1. strSQL = "UPDATE PCB SET PCB_FILTER='" & txtbedrijfsnaam.Text & txtmerk.Text & txttype.Text & txtserienummer.Text & txtos.Text & txtgebruiker.Text & txtgelabeld.Text & txtvernietigd.Text & "' WHERE PCB_ID = " & strHoogsteID
Bedankt door: SICKBOYYYYY
Offline SICKBOYYYYY - 09/02/2010 08:30
Avatar van SICKBOYYYYY Lid Ok titjes, het werkt, alsvast bedankt!

grtz
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.207s