2012-04-22 7 views
13

मैं डेटासोड प्रॉपर्टी को सेट करके सीधे अपने डेटाग्रिड व्यू कंट्रोल को अपने व्यवसाय ऑब्जेक्ट्स की बाध्यकारी सूची में जोड़ सकता हूं। मेरा व्यवसाय ऑब्जेक्ट लागू करता है IotifyPropertyChanged, इसलिए बाध्यकारी सूची में कोई नया आइटम जोड़ा जाने पर डीजीवी अपडेट हो जाता है या मौजूदा अपडेट किया जाता है।बाध्यकारी सूची <business obj> डेटासोर्स के रूप में बाइंडिंगसोर्स का उपयोग करने के क्या फायदे हैं?

एकल रिकॉर्ड से निपटने के संबंध में, मैं अपने व्यावसायिक ऑब्जेक्ट को टेक्स्टबॉक्स और अन्य प्रासंगिक नियंत्रणों से जोड़ सकता हूं।

मैं भी BindingList से निकाले जाते हैं और, IBindable के लिए आवश्यक तरीकों को लागू करने के लिए एक CustomBindingList वर्ग बनाने के रूप में नीचे दिए गए लिंक में विस्तार से बताया जा सकता है: http://msdn.microsoft.com/en-us/library/aa480736.aspx

वैकल्पिक रूप से, मैंने देखा है लोगों को एक BindingSource का उपयोग करें। बाइंडिंग स्रोत का डेटासोर्स व्यवसाय वस्तु है और डीजीवी का डेटासोर्स बाइंडिंग स्रोत है।

किसी भी मामले में, एक BindingSource पर आधारित मुझे प्रदान नहीं करता है:

  1. छनन (फ़िल्टर काम नहीं करता है)। मेरे द्वारा कार्यान्वयन की आवश्यकता है।
  2. सॉर्ट और खोज काम नहीं करता है। मेरे द्वारा कार्यान्वयन की आवश्यकता है।

तो, बाइंडिंग स्रोत दृष्टिकोण क्यों अनुशंसित है?

विस्तृत चित्र: ओओपीएस अवधारणाओं और सी # के लिए नया हूँ। डेटाबेस अनुप्रयोगों के साथ काम करना। WinForms। अब तक केवल डेटासेट/डेटाटेबल दृष्टिकोण का उपयोग किया है। अब अपनी खुद की कस्टम कक्षाओं को बनाने और उपयोग करने की कोशिश कर रहा है।

आमतौर पर एक मास्टर/विस्तार फार्म है। जब मैं डीजीवी में एक विस्तार पंक्ति पर क्लिक करता हूं, तो मैं उस रिकॉर्ड को एक अलग विंडो में संपादित करना चाहता हूं। तो मुझे डीजीवी में उस पंक्ति द्वारा प्रतिनिधित्व सूची आइटम पर एक हैंडल प्राप्त करने की आवश्यकता है। इसके लिए एक समाधान खोजने की कोशिश कर मुझे इस बिंदु और इस संदेह में लाया है।

यह देखते हुए कि मैं क्या करना चाहता हूं, कौन सा दृष्टिकोण बेहतर है और क्यों?

यहां कुछ पॉइंटर्स वास्तव में मदद करेंगे क्योंकि मैं इसके लिए बहुत नया हूं।

+0

बाइंडिंग स्रोत का उपयोग करने के बीच [सी # डेटाग्रिड व्यू.डेटासोर्स अंतर का संभावित डुप्लिकेट] और नहीं (http://stackoverflow.com/questions/4433281/c-sharp-datagridview- डेटासोर्स- डिफरेंस-between-using-bindingsource-and-not) –

उत्तर

1

यह एक BindingSource उपयोग करने के लिए जब प्रपत्र पर एक से अधिक नियंत्रण एक ही डेटा स्रोत का उपयोग की सिफारिश की है (Behind the Scenes: Improvements to Windows Forms Data Binding)

डिजाइन समय: मैं व्यक्तिगत रूप से BindingSource बहुत उपयोगी पाते हैं जब मेरे व्यापार वस्तु से गुण को चुनने जब करने के लिए डेटा बाइंडिंग नियंत्रित करता है।

वर्तमान में चयनित पंक्ति में हैंडल प्राप्त करने के लिए, बाइंडिंगसोर्स 1। Current को MyBusinessObject के रूप में आजमाएं;

फ़िल्टरिंग और खोज के लिए: मैं लागू होने वाले ग्रिड के लिए एक थर्ड पार्टी डीएल का उपयोग करता हूं। तो माफ करना, इसके साथ आपकी मदद नहीं कर सकता।

जब आप व्यापार की वस्तुओं के विभिन्न प्रकार के सूचियों के साथ काम करते हैं, सूची का उपयोग नहीं करते सीधे

List<IAnimal> animals = new List<IAnimal>(); 
animals.Add(new Cat()); 
animals.Add(new Dog()); 
bindingSource1.DataSource = animals; 

इस प्रकार की BindingList का उपयोग करें:

bindingSource1.DataSource = new BindingList<IAnimal>(animals); 

सभी पहुँचा सुनिश्चित करेंगे कि सूची में ऑब्जेक्ट्स प्रकार IAimal है और आपको कुछ अपवाद बचाता है।

0

डेटासोर्स के लिए बाध्यकारी आपको बड़े सेट से निपटने के दौरान लाभ प्रदान कर सकता है, जिसमें से केवल एक हिस्सा प्रदर्शित होता है। उदाहरण के लिए यदि आप टेलीरिक लिस्ट व्यू को यहां देखें http://www.telerik.com/help/winforms/listview-databinding.html (इनमें से कई घटक पैकेज हैं, तो यह केवल नवीनतम है जिसे मैं बिट्स और टुकड़ों का उपयोग कर रहा हूं)।

दृश्य बहुत हल्का है और आपकी स्क्रॉल स्थिति निर्धारित करता है कि कौन सी वस्तुओं को वास्तव में प्रदर्शित किया जाना चाहिए। इसलिए यदि आप केवल पहली 10 ऑब्जेक्ट्स को देखते हैं और कभी भी नीचे स्क्रॉल नहीं करते हैं तो केवल 10 बाध्य और प्रदर्शित होते हैं। यह संभावित रूप से अनधिकृत डेटा पहुंच से बचाता है।

उनके ग्रिड व्यू एक ही तरीके से कार्य करता है। ग्रिड का प्रदर्शित भाग है जो संभावित रूप से विशाल अंतर्निहित ग्रिड से अलग है।

बोनस के रूप में, आपको फ़िल्टरिंग, सॉर्टिंग, ग्रुपिंग मिलती है।

-2

जहाँ तक मुझे पता है, यदि आप एक डेटाबेस साथ काम कर रहे हैं, आप एक bindingSource बीच में आदेश डेटाबेस और अपने नियंत्रण के बीच एक द्विपक्षीय पुल स्थापित करने के लिए इस्तेमाल करते हैं। अन्यथा आप अपने नियंत्रण के लिए स्रोत के रूप में बाइंडिंगलिस्ट का उपयोग कर सकते हैं।

संबंधित मुद्दे