login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Treeview waardes bepalen dmv waardes database

Offline rredspike1 - 05/01/2009 17:14
Avatar van rredspike1Lid Zoals het onderwerp al zegt.

Er moet een mogelijkheid zijn om waardes nodes en childnodes te laten bepalen door waardes uit een table (database).

Waarbij de NODES de Bedrijfsnaam is en de CHILDNODES de OPDRACHTNAAM is.

De verbinding met de database is als public ingesteld in een ander bestand.

PS is Dim strKlant As String = Nothing beter dan
Dim strKlant As String = ""

CODE:
  1. Private Sub OpdrachtOphalen()
  2.  
  3. Dim objNode As TreeNode
  4. Dim objChildNode As TreeNode
  5. Dim strOpdrachtOphalen As String = Nothing
  6. Dim ID As Long = 0
  7.  
  8. If Opstart = False Then Exit Sub
  9. strOpdrachtOphalen = trvOpdrachtenOphalen.Nodes.ToString
  10. SQL = "Select Bedrijfsnaam, Opdrachtnaam From Opdrachten where Bedrijsnaam ='" & strOpdrachtOphalen & "'"
  11. Dim command As New OleDb.OleDbCommand(SQL, oCon)
  12. oCon.Open()
  13. Using reader As OleDb.OleDbDataReader = command.ExecuteReader((CommandBehavior.CloseConnection))
  14. If reader.HasRows = True Then
  15. While reader.Read
  16. ID = reader("Bedrijfsnaam")
  17. End While
  18. End If
  19.  
  20. End Using
  21. oCon.Close()
  22.  
  23. SQL = "Select Bedrijfsnaam, Opdrachtnaam From Opdrachten Where Bedrijfsnaam = " & ID
  24. Try
  25. Dim commandklanten As New OleDb.OleDbCommand(SQL, oCon)
  26. oCon.Open()
  27. Using reader As OleDb.OleDbDataReader = commandklanten.ExecuteReader((CommandBehavior.CloseConnection))
  28. If reader.HasRows = True Then
  29. While reader.Read
  30. objNode = trvOpdrachtenOphalen.Nodes.Add("Bedrijfsnaam")
  31. objChildNode = trvOpdrachtenOphalen.Nodes.Add("Opdrachtnaam")
  32. End While
  33. End If
  34.  
  35. End Using
  36. oCon.Close()
  37. Catch ex As Exception
  38. If oCon.State = ConnectionState.Open Then oCon.Close()
  39. End Try
  40.  
  41. End Sub


Kom er niet goed uit, wie kan mij helpen?

Weet geeneens of ik het zo goed doe, blijkbaar niet, want geeft niks weer...

5 antwoorden

Gesponsorde links
Offline Wim - 05/01/2009 19:32
Avatar van Wim Crew algemeen Dim strKlant As String = Nothing
=
Dim strKlant As String = String.Empty
=
Dim strKlant As String = ""
=
Dim strKlant As String

Een gedeelte komt van VB.NET, een gedeelte van de oude VB. Deze vraag is bij ons in een les ooit naar bovengekomen, en de docent antwoordde dat het niets uit maakt wat ikzelf ook het logischt vindt
---
Kan je misschien een voorbeeld van de gewenste ouput geven? Of krijg je een foutmelding...?
Offline rredspike1 - 05/01/2009 19:39
Avatar van rredspike1 Lid Ik heb het alweer weggehaald, maar zou eigenlijk een treeview willen vullen met gegevens uit de database, waar

de Node -> bedrijfsnaam is
en de ChildNode ->Opdrachtnaam is

Dus + Bedrijfsnaam en als je op die + drukt dat die dan openklapt en dan de bijhorende Opdrachtnaam weergeeft.
Dus het moet eigenlijk dynamisch zijn (logisch), maar ik weet niet zo goed hoe ik dit voor elkaar krijg.
Offline Deef775 - 18/01/2009 16:23
Avatar van Deef775 Lid Ik zit eigenlijk met een soortgelijke vraag.

Maar als je een Childnode aan een Node wilt toevoegen denk ik dat je het volgende moet gebruiken :

objChildNode = trvOpdrachtenOphalen.Nodes(0).Nodes.Add("Opdrachtnaam")

De manier om het in code door een database te laten opvullen daar ben ik nog niet uit 
Offline rredspike1 - 18/01/2009 19:13
Avatar van rredspike1 Lid Ja inderdaad, zoiets wil ik ook, ik zoek dus ook hoe je het door de database laat opvullen.
Offline Abbas - 19/01/2009 03:10 (laatste wijziging 19/01/2009 04:04)
Avatar van Abbas Gouden medaille

Crew .NET
Ik heb even een voorbeeld gemaakt en dat werkt perfect (Voorbeeld). Het haalt de bedrijfsnaam en de opdrachten op uit de DB en tijdens het lezen worden die in ChildNodes gestopt om dan in de TreeView gezet te worden. Ze worden alfabetisch op bedrijfsnaam gesorteerd en de opdrachten binnen het bedrijf op ID. Onderstaande code heb ik in mijn Form_Load event staan:

  1. 'Variabelen declareren
  2. Dim dbConn As New OleDbConnection(Connection.GetConnection())
  3. Dim dbReader As OleDbDataReader
  4. Dim strQuery = "SELECT Bedrijf, Naam FROM Opdracht ORDER BY Bedrijf, Id ASC"
  5. Dim sqlComm As OleDbCommand = New OleDbCommand(strQuery, dbConn)
  6. Dim parentNode As TreeNode
  7. Dim oldValue As String = ""
  8.  
  9. Try
  10. dbConn.Open()
  11. dbReader = sqlComm.ExecuteReader()
  12. While dbReader.Read()
  13. 'Als de vorige gelezen waarde (bedrijfsnaam) verschilt van
  14. 'de vorige: nieuwe TreeNode maken en toevoegen
  15. If Not oldValue.Equals(dbReader.GetValue(0).ToString()) Then
  16. parentNode = New TreeNode(dbReader.GetValue(0).ToString())
  17. treeOpdrachten.Nodes.Add(parentNode)
  18. End If
  19. 'Achteraf telkens de opdrachten toevoegen aan een bedrijf
  20. parentNode.Nodes.Add(dbReader.GetValue(1).ToString())
  21. 'Laatst gelezen bedrijfsnaam opslaan om te vergelijken
  22. oldValue = dbReader.GetValue(0).ToString()
  23. End While
  24. dbReader.Close()
  25. Catch ex As Exception
  26. MessageBox.Show(ex.Message, "Fout", MessageBoxButtons.OK, MessageBoxIcon.Information)
  27. Finally
  28. dbConn.Close()
  29. End Try


Je zal zien dat als je de code in je Visual Studio, er in de volgende regel het eerste woord (parentNode) onderlijnd staat:

  1. parentNode.Nodes.Add(dbReader.GetValue(1).ToString())

Dat is omdat je deze gebruikt alvorens ze een waarde te geven en er eventueel fouten kunnen optreden, maar aangezien je altijd zoizo eerst een ParentNode aanmaakt (immers, oldValue is gelijk aan "") zal dit geen problemen opleveren. Alleen als er een veld is in je DB waar de bedrijfsnaam leeg is én als dit de eerste gelezen waarde is, maar de kans dat dat gebeurt... 

Edit:
Ohja, nog iets. Eigenlijk zit je DB op deze manier niet goed in elkaar want als je echt veel gegevens gaat krijgen heb je veel dubbele gegevens. Je kan dan beter een aparte tabel voor de bedrijven maken met als kolommen (ID, Naam, ...). Dat ID gebruik je dan in plaats van de Naam nu, je moet dan enkel je query aanpassen. 

Veel succes! 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.175s