Zum Inhalt springen

[C#] Treeview Childnodes nach doppelten Elementen durchsuchen


Goulasz

Empfohlene Beiträge

Hallo!

Ich arbeite an nem kleinen Programm, das verschiedene Datensätze in einem Treeview-Element geordnet darstellt. Die Datensätze speichere ich zeilenweise per StreamWriter in einer Textdatei, genauso lese ich sie auch wieder ein.

Jetzt würde ich beim Einlesen bzw. am besten schon beim Übertragen in die TreeView doppelte Einträge filtern/ das Eintragen solcher direkt verhindern.

Da ich allerdings noch neu in C# bin und ich mit TreeNodeCollection.Contains bzw. ContainsKey keine Überprüfung auf doppelten Text bewerkstelligen konnte, wollte ich mich mal erkundigen, ob man die Strings der Childnodes separat überprüfen kann, wenn ja, mit welcher Methode. Code muss nicht sein, ich wusel mir das schon irgendwie selbst zusammen.

Hier der Code für das Eintragen in die TreeView:

Anbei ein Screenie, wie die Benutzeroberfläche aussieht; und zur Verdeutlichung des Problems.

        private void Ok_Click(object sender, System.EventArgs e)//Click-Event für Ok

        {

            //Festlegung des Strings "Datensatz" für den als Knoten zu speichernden Text

            {

                string Datensatz = null;

                //String anfangs leer

                Datensatz = textBox1.Text + ";";

                Datensatz = Datensatz + textBox2.Text + ";";

                Datensatz = Datensatz + textBox3.Text + ";";

                Datensatz = Datensatz + textBox4.Text + ";";

                Datensatz = Datensatz + textBox5.Text;

                //Der string "Datensatz" ergibt sich aus den Inhalten aller 5 textBoxen(getrennt durch semicola)


                string sub = Datensatz.Trim().Substring(0, 1);

                //Definierung eines Substrings, der den ersten Buchstaben des jeweiligen "item"-strings darstellt

                sub = sub.ToUpper();

                //Konvertierung des Substrings in einen Großbuchstaben, z.B. bei falscher Usereingabe


                bool Knotengefunden = false;

                /*Festlegung der booleschen Variable Knotengefunden

                 * bedeutet: anfangs sind keine Hauptknoten vorhanden*/

                foreach (TreeNode Knoten1 in treeView1.Nodes)

                //Für jeden Hauptknoten "Knoten" in den "Node"-Elementen der treeview

                {


                    if (Knoten1.Text == sub)


                    /*Wenn der Text des Knotens dem string "sub",also dem

                    * Anfangsbuchstaben des Nachnamens des Datensatzes entspricht*/

                    {

                        Knoten1.Nodes.Add(Datensatz);

                        //Füge dem Haupt

                        Knotengefunden = true;

                        //

                    }

                    //Zeige an "Knoten gefunden"




                }

                if (!Knotengefunden)

                {

                    TreeNode Knoten;

                    //Festlegung des Hauptknotens "Knoten"

                    Knoten = treeView1.Nodes.Add(sub);

                    if (!Knoten.Nodes.ContainsKey(Datensatz))

                    Knoten.Nodes.Add(Datensatz);


                }/*

                //Füge einen Oberknoten mit dem Text string "sub" ein, also dem Anfangsbuchstaben des Nachnamens

                Knoten.Nodes.Add(Datensatz.Trim());

                //Füge einen neuen Unterknoten mit dem string "Datensatz" hinzu 

                Knoten.Expand();

                //Öffne den Oberknoten und zeige den Unterknoten an*/



            }

        }

Danke schonmal im voraus für Lösungsansätze!

Gruß, Zieg0re

P.S: Unorthodoxen/falschen Programmier- bzw. Einrückstil bitte ich zu entschuldigen, ich programmiere erst seit 2 Wochen.

P.P.S: Wer Rechtschreibfehler findet, darf sie behalten.

post-63994-14430448449168_thumb.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ich mach das immer über einen Trick, ist zwar auch net sauber aber geht ;-)

DA ich VB.NET Programmierer bin hier VB.Code

Dim htMerkWerte as new Hashtable() 

                               'Das natürlich nur einmal pro einleselauf machen

if htMerkWerte(sub) is nothing then

      'Hier dein Code

      htMerkWerte.Add(sub, sub)

else

      'Datensatz vorhanden hier nichts tun

end if

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...