Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[C#] Treeview Childnodes nach doppelten Elementen durchsuchen

Empfohlene Antworten

Veröffentlicht

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

Warum die Nodes prüfen? Nach dem Einlesen aus der Datei wirst du ja wohl die Daten in einem Array oder ähnlichem verfügbar haben, und kannst dann die Inhalte der Textfelder mit den vorhandenen Einträgen abgleichen.

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.