Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

[C#] Treeview aus DB füllen

Diskussion: [C#] Treeview aus DB füllen im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo zusammen, ich habe aktuell das Problem, dass ich beim Füllen einer Treeview immer wieder die Fehlermeldung bekomme: Code: ...

Antwort
Alt 01.04.11, 00:50   #1 (permalink)
 
Benutzerbild von reaLInsanity
 
Registriert seit: 10.01.06
reaLInsanity Leistung: Facit NTK
reaLInsanity eine Nachricht über ICQ schicken reaLInsanity eine Nachricht über AIM schicken reaLInsanity eine Nachricht über Yahoo! schicken
Likes: 0
Standard [C#] Treeview aus DB füllen

Anzeige

Hallo zusammen, ich habe aktuell das Problem, dass ich beim Füllen einer Treeview immer wieder die Fehlermeldung bekomme:

Code:
Die Auflistung wurde geändert; möglicherweise wurde die Enumeration nicht ausgeführt.
Jedoch kann ich mir nicht erklären, dass ich die Auflistung irgendwie, oder in irgendeiner Form ändere.

Meine Treeview bereite ich wie folgt auf:

Code:
private void FillTreeView()
        {
            TreeNode root = (treeView1.Nodes[0].Name == "Bibliothek" ? treeView1.Nodes[0] : treeView1.Nodes.Add("Bibliothek"));
            
            root.EnsureVisible();
            root.TreeView.Focus();
            root.TreeView.Select();

            DataSet dsCDs = LoadData("SELECT DISTINCT ID, Name FROM CDs ORDER BY Name");
            try
            {
                foreach (DataRow rowCD in dsCDs.Tables[0].Rows)
                {
                    int cdID = Convert.ToInt32(rowCD["ID"]);
                    TreeNode childRoot = new TreeNode(rowCD["Name"].ToString());
                    root.Nodes.Add(childRoot);
                    childRoot.ImageIndex = 1;
                    childRoot.SelectedImageIndex = 1;
                    childRoot.Parent.Expand();

                    DataSet dsTracks = LoadData("SELECT Title, Artist, Nr FROM Tracks WHERE FK_CDs_ID = " + cdID + " ORDER BY Nr");
                    foreach (DataRow rowTrack in dsTracks.Tables[0].Rows)
                    {
                        TreeNode childCD = new TreeNode("#" + rowTrack["Nr"].ToString() + " " + rowTrack["Artist"].ToString() + " - " + rowTrack["Title"].ToString());
                        childRoot.Nodes.Add(childCD);
                        childCD.ImageIndex = 2;
                        childCD.SelectedImageIndex = 2;
                    }
                    dsTracks.Dispose();
                }
                dsCDs.Dispose();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
Hat jemand von Euch eine Idee?
Ein Node mit x Children wird gesetzt, beim zweiten Node + Children steigt er aus.

Geändert von reaLInsanity (01.04.11 um 00:58 Uhr)
reaLInsanity ist offline   Mit Zitat antworten
Alt 01.04.11, 21:11   #2 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 210
Standard

bitte mal die ganze exception mit stacktrace


abgesehen davon sei dir die statische funktion Format() aus der String klasse ans herz gelegt ...

zudem ist der UI thread nicht dafür da datenmengen aus einer DB zu holen ... das führt zu hängenden anwendungen ... dinge die zeitaufwendig sein können kann man relativ einfach mit der ThreadPool klasse vom UI thread trennen, ohne all zu viel aufwand damit zu haben ... du musst lediglich auf eine sache achten: wenn die daten abgeholt und aufbereitet sind, und du sie auf die UI ausgeben willst, darf nur der UI thread mit den controls hantieren, und auch nur der UI thread sollte neue controls erzeugen... um dies zu gewährleisten gibts die schnitstelle ISynchronizedInvoke ... die stellt eine property namens "InvokeRequired" zur verfügung, mit der du prüfen kannst ob der aktuelle thread auf das control zugreifen darf, oder ob er einen invoke-call braucht ... praktischer weise bietet die schnittstelle auch gleich die Invoke-Funktion an ... die führt einen threadübergreifenden call synchron aus, und blockiert den aufrufenden thread solange bis der gerufene thread mit der ausführung fertig ist... alternativ gibts BeginInvoke() und EndInvoke() für die asynchrone ausführung ... die Klasse Control implementiert ISynchronizedInvoke und vererbt diese funktionalität freundlicherweise
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » [C#] Treeview aus DB füllen
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61