login  Naam:   Wachtwoord: 
Registreer je!
 Forum
Zoeken  Regels  Help

Categorieën > VB.NET > Zoekopdracht met timer en textbox

Onderwerp: Zoekopdracht met timer en textbox (Opgelost)
Door: SICKBOYYYYY
Op: 04/02/2010 14:06
Laatste wijziging: 05/02/2010 09:04
Offline offline




Lid
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?

Door: Mario
Op: 04/02/2010 15:05
#1
Offline offline



Moderator
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


Door: SICKBOYYYYY
Op: 04/02/2010 16:07
Laatste wijziging: 04/02/2010 16:17
#2
Offline offline



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!

Door: titjes
Op: 05/02/2010 00:01
Laatste wijziging: 05/02/2010 00:06
#3
Online online



Gouden medaille

.NET Admin

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.

Door: SICKBOYYYYY
Op: 05/02/2010 09:00
Laatste wijziging: 05/02/2010 09:03
#4
Offline offline



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


Door: titjes
Op: 05/02/2010 10:51
#5
Online online



Gouden medaille

.NET Admin

Waarom zou dit niet kunnen? Anders geef eens wat code.. ;) Nu is het gokken naar hoe het eruit ziet..

Door: SICKBOYYYYY
Op: 05/02/2010 13:56
Laatste wijziging: 05/02/2010 14:38
#6
Offline offline



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!

Door: titjes
Op: 05/02/2010 17:22
#7
Online online



Gouden medaille

.NET Admin

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


Door: SICKBOYYYYY
Op: 08/02/2010 08:53
Laatste wijziging: 08/02/2010 16:55
#8
Offline offline



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


Door: titjes
Op: 08/02/2010 22:17
#9
Online online



Gouden medaille

.NET Admin

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


Door: SICKBOYYYYY
Op: 09/02/2010 08:30
#10
Offline offline



Lid
Ok titjes, het werkt, alsvast bedankt!

grtz

Je moet ingelogd zijn om een reactie te kunnen posten...
Actieve forumberichten:

© 2002-2010 Sitemasters.be - Regels - Gehost door: Netfeed - Laadtijd: 0.136s