c# - TreeView child node populating problem -


मुझे grouping के साथ समग्र डेटाबेस तालिका से एक विशाल वृक्ष का दृश्य बनाने की आवश्यकता है

ग्रुपिंग है, जो हम एसक्यूएल सर्वर मैनेजमेंट स्टूडियो एक्सप्रेस में देखते हैं एक के बाद डाटाबेस नोड, कुछ तय फ़ोल्डरों दिखाए जाते हैं (जैसे, डेटाबेस आरेख , टेबल्स , देखें , <कोड > समानार्थी , Programmability और सुरक्षा ) और बच्चों उन फ़ोल्डर में वर्गीकृत किया है।

इस बिंदु तक मैं का इस्तेमाल किया है AfterSelect घटना और हैंडलर इस लक्ष्य को हासिल करने के लिए।

लेकिन साथ समस्या AfterSelect है, नोड चयन करने से पहले, दर्शक नहीं पता करने के लिए किसी भी बच्चे है या नहीं सक्षम है उपलब्ध। ऐसा इसलिए है, क्योंकि विस्तार योग्य प्लस चिह्न दिखाई नहीं दे रहा है।

मैं इससे पहले एक्सपैंड का उपयोग करना चाहता हूं। लेकिन BeforeExpand के साथ समस्या है, यह काम करता है अगर बच्चे पहले से ही आबादी वाले हैं उस मामले में, जब मैं समूहों पर क्लिक करता हूं, कुछ भी नहीं होता।

इसे कैसे हल करें?

इसलिए कोड / वेब लिंक की सराहना की जाएगी।

मैं आमतौर पर क्या करता हूं एक "डमी बाल नोड" जोड़ना है, जहां कहीं भी बच्चे आलसी तरीके से लोड किए जाएं। इससे माता-पिता को प्लस चिह्न होगा, और फिर आप आफ्टरएक्सपैड इवेंट में कोड जोड़ सकते हैं जहां आप निम्न करते हैं:

  • जांचें कि क्या वास्तव में एक बच्चा है, और अगर वह बच्चा है डमी नोड
  • अगर डमी नोड पाया जाता है (यदि आप डमी नोड की पहचान के लिए टैग संपत्ति का उपयोग कर सकते हैं),, एक खोज बच्चों और उन्हें माता-पिता नोड में जोड़ने के लिए लांच निकाल कर की समाप्ति डमी नोड।

मैं आम तौर पर डमी नोड को "डेटा लोड करना" जैसे एक पाठ देता हूं। कृपया प्रतीक्षा करें ... या तो, ताकि उपयोगकर्ता को कुछ जानकारी मिलती है कि क्या हो रहा है।

अपडेट
मैंने एक साधारण उदाहरण रखा है:

  सार्वजनिक वर्ग TreeViewSample: फ़ॉर्म {निजी TreeView _treeView; सार्वजनिक TreeViewSample () {this._treeView = नई प्रणाली। Windows.Forms.TreeView (); This._treeView.Location = new System.Drawing.Point (12, 12); This._treeView.Size = नया सिस्टम। ड्राइंग। साइज (200, 400); This._treeView.AfterExpand + = नया वृक्षदृश्यदर्शिका, (TreeView_AfterExpand); This.ClientSize = नई प्रणाली। ड्रॉइंग। आकार (224, 424); this.Controls.Add (this._treeView); This.Text = "आलसी लोड नमूना TreeView"; InitializeTreeView (); } शून्य TreeView_AfterExpand (वस्तु प्रेषक, TreeViewEventArgs ई) {if (e.Node.Nodes.Count == 1 & amp; & amp; e.Node.Nodes [0] .Tag == "डमी") {// इस नोड नहीं है अब तक तैयार की गई, // एक धागा लांच डेटा ThreadPool.QueueUserWorkItem (राज्य = & gt प्राप्त करने के लिए, {IEnumerable & LT; SomeClass & gt; childItems = GetData (); // (ट्री दृश्य में डेटा लोड यूआई धागे पर) _treeView.BeginInvoke ((कार्रवाई) प्रतिनिधि {PopulateChildren (e.Node, childItems);})}}); }} निजी शून्य populateChildren (ट्रीएनोड मूल, IEnumerable & lt; SomeClass & gt; childItems) {TreeNode बच्चे; ट्री नोड डमी; ट्रीएनोड मूलडम्मीआईटीम = पैरेंट.नोड [0]; विदेशी बाल (बाल आइटम में आइटम) {बच्चे = नया वृक्ष नोड (आइटम। पाठ); डमी = नया ट्रीएनोड ("लोड हो रहा है। कृपया प्रतीक्षा करें ..."); डमी। टाग = "डमी"; child.Nodes.Add (डमी); parent.Nodes.Add (बच्चे); } OriginalDummyItem.Remove (); } निजी IEnumerable & lt; SomeClass & gt; GetData () {// अनुकरण करना है कि यह कुछ समय लगता है थ्रेड। नींद (500); नई सूची वापसी & lt; SomeClass & gt; {नया कुछ क्लास (टेक्स्ट = "वन"}, नए कुछ क्लास {टेक्स्ट = "दो"}, नया कुछ क्लास {टेक्स्ट = "तीन"}}; } निजी शून्य InitializeTreeView () {TreeNode रूटनोड = नया TreeNode ("रूट"); ट्री नोड डमी नोड = नया ट्रीएनोड ("लोड हो रहा है। कृपया प्रतीक्षा करें ..."); डमी नोड। टाग = "डमी"; rootNode.Nodes.Add (dummyNode); _treeView.Nodes.Add (rootNode); }} सार्वजनिक वर्ग SomeClass {सार्वजनिक स्ट्रिंग पाठ {get; सेट; }}  

Comments