| |
VB.NET - Ein- und UmsteigerRe: Stückliste rekursiv durchlaufen | | | Autor: Manfred X | Datum: 07.01.17 09:29 |
| Hallo!
Hier ein Beispiel, bei der die hierarchische Datenstruktur
in Treeview-Knoten eingetragen ist.
Die Funktion ermittelt alle Knoten-Pfade, in der ein bestimmter Eintrag
vorkommt und schreibt diese Pfade in eine Liste.
In einem weiteren Schritt ist jeder dieser Pfade zu zerlegen
(Split -- String-Array)
und jeweils alle Werte zwischen Hauptknoten und gesuchtem Eintrag
sind vermutlich für Deinen Fall relevant.
Public Class frmFindTreeNodes
Dim WithEvents trv As New TreeView With {.Parent = Me}
Private Sub frmFindTreeNodes_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
'testdaten
Dim tn As TreeNode = trv.Nodes.Add("Art1")
tn = tn.Nodes.Add("Art1-1")
tn = tn.Nodes.Add("krit")
tn = trv.Nodes.Add("Art2")
tn = tn.Nodes.Add("Art2-1")
tn = tn.Nodes.Add("Art2-2")
tn = tn.Nodes.Add("krit")
tn = trv.Nodes.Add("Art3")
tn = trv.Nodes.Add("krit")
Dim pathlist As New List(Of String)
FindPaths(trv.Nodes, "krit", pathlist)
For i As Integer = 0 To pathlist.Count - 1
Console.WriteLine(pathlist(i))
Next i
End Sub
''' <summary>Suche nach den Knoten-Pfaden, die einen bestimmten Text
' enthalten</summary>
''' <param name="tnc">zu durchsuchende Knoten-Auflistung</param>
''' <param name="Text">zu suchender Text (Groß-/Kleinschreibung
' ignoriert)</param>
Private Sub FindPaths(tnc As TreeNodeCollection, _
ByVal Text As String, ByRef pathlist As List(Of String))
If String.IsNullOrEmpty(Text) Then pathlist = Nothing : Exit Sub
Dim TextToFind As String = Text.Trim.ToLower
For Each tnCurr As TreeNode In tnc
If tnCurr.Text.Trim.ToLower = TextToFind Then
pathlist.Add(tnCurr.FullPath)
End If
'rekursiv weitersuchen
FindPaths(tnCurr.Nodes, Text, pathlist)
Next tnCurr
End Sub
End Class | |
Stückliste rekursiv durchlaufen | | | Autor: Suspeka | Datum: 07.01.17 00:56 |
| Hallo Community,
ich versuche verzweifelt Stücklistenbenen von unten nach oben zu laufen
Ich habe einen Artikel der irgendwo in einer Stücklistenebene steht
Nun benötige ich alle Artikel zwiwchen dem Artikel und dem hauptartikel
Also als Beispiel:
Artikel = "4711"
Dieser Artikel ist in der Stückliste vom "4712"
Und der Artikel "4712" ist in der Stückliste vom "4713"
Und der Artikel "4713" ist in dem Artikel "Hauptartikel"
Jetzt geht ich auf die Suche mit Artikel "4711" und brauche dann folgende Ausgabe:
Gefundene Artikel
4712
4713
Hauptartikel
Dabei können die Ebenen zwischen den Artikel x sein
Dane für eure Hilfe
Suspekta | |
Re: Stückliste rekursiv durchlaufen | | | Autor: Franki | Datum: 07.01.17 02:21 |
| Hallo,
dazu kann man dir keinen Hinweis geben ohne zu wissen wie du deine Stücklisten, bzw. die Ebenen der einzelnen Artikel aufgebaut hast.
Wie speicherst du die Daten? In einer Datenbank vermute ich mal, da kommt es darauf an wie die Tabellen organisiert sind. Könnte auch eine Textdatei sein aber auch hier kann man ohne deren genaue Struktur keine Antwort geben.
Dass 4711 zu 1412 gehört muss ja irgendwo gespeichet sein. Und nur wenn man die Zugehörigkeit kennt kann man sie auch wieder reproduieren.
Also etwas genauere Informationen braucht man hier schon...
Gruß
Frank | |
Re: Stückliste rekursiv durchlaufen | | | Autor: sv00010 | Datum: 07.01.17 09:12 |
| Du musst herausfinden was die unterste Ebene ist und dann alle Einträge dieser Ebene z.B. Ebene 5 in eine Gesamtliste eintragen.
Structure Gesamtartikel
Dim strArtikel As String
Dim strPfad As String
End Structure
Dim Gesamtliste_Ebene5 As System.Collections.Generic(Of Gesamtartikel) Statt strPfad könnte auch ein Array oder eine Liste genommen werden, wo man sich merkt auf welcher Ebene man gerade ist.
Dann die Gesamtliste nach dem zu suchenden Wert durchsuchen.
Wenn dort nichts gefunden wurde, dann das selbe auf einer Ebene höher wiederholen usw. | |
Re: Stückliste rekursiv durchlaufen | | | Autor: Suspeka | Datum: 07.01.17 09:13 |
| Hallo Frank,
Danke für deine Antwort
die Daten sind in einer MySQL Tabelle gespeichert
In meinem Beispiel sieht die Tabelle so aus:
Hauptartikel | Unterartikel | Menge
4712 | 4711 | 50
4713 | 4712 | 20
Hauptartikel | 4713 | 1
Ich hoffe das ist so verständlich
LG | |
Re: Stückliste rekursiv durchlaufen | | | Autor: Suspeka | Datum: 07.01.17 09:25 |
| Hi,
sorry aber das versteh ich nicht ^^
ich habe ja den Artikel 4711 nun möchte ich herausfinden in welcher Stückliste dieser Artikel steht
in meinem Beispiel unter 4712, jetzt suche ich quasi neu mit dem Artikel 4712 in welcher Stückliste dieser Artikel steht und finde in meinem Beispiel 4713, nun möchte ich wieder wissen in welcher Stückliste dieser Artikel steht und finde Hauptartikel und möchte ich wissen in welcher Stücklist Hauptartikel steht und finde nix mehr also weiß ich nun nach Hauptartikel gibt es keine Ebene mehr
Es kann natürlich auch vorkommen, dass z.B. Artikel 4712 in meheren Stücklisten vorkommt, dann muss ich alle diese Artikel finden
Danke
Suspekta | |
Re: Stückliste rekursiv durchlaufen | | | Autor: Manfred X | Datum: 07.01.17 09:50 |
| Hallo!
Falls ich Deine Tabelle richtig verstehe, ist sie unvollständig.
Es gibt offenbar Abhängigkeiten (Hierarchie) zwischen den Datensätzen.
In dem Fall benötigst Du eine Primärschlüsselspalte, die eine
eindeutige Indentifikation der Sätze ermöglicht.
Zudem benötigst Du eine weitere Spalte für die Angabe der Hierarchie,
in der jeweils der Schlüssel des nächsten untergeordneten Satzes
(oder -1 am Ende der Hierarchie) eingetragen ist. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats TOP! Unser Nr. 1
Neu! sevDataGrid 3.0
Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|