Goulasz Geschrieben 21. August 2009 Teilen Geschrieben 21. August 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0815FIA Geschrieben 22. August 2009 Teilen Geschrieben 22. August 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
HJST1979 Geschrieben 24. August 2009 Teilen Geschrieben 24. August 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.