2012-09-27 6 views
6

मेरे पास वर्क्स ऑर्डर के लिए एक कैप्चर फॉर्म है, और इसमें CustomerBindingSource और WorksOrderBindingSource नियंत्रण है। अधिकांश संपादन फ़ील्ड्स WorksOrderBindingSource तक हैं, कॉम्बोबॉक्स के साथ, जिनकी सूची CustomerBindingSource से जुड़ी है, और SelectedValue फ़ील्ड WorksOrderBindingSource में है। यह सब बहुत ही नियमित और मानक है, यहां कोई मजेदार नहीं है।मैं बाध्यकारी स्रोत वर्तमान रिकॉर्ड को शून्य कैसे सेट कर सकता हूं?

फिर, मेरे पास कुछ टेक्स्टबॉक्स फ़ील्ड भी हैं जिनमें मैं वर्तमान में चयनित कार्य आदेश के लिए वर्तमान में चयनित ग्राहक के गुण दिखाने के लिए उपयोग करता हूं। मैंने इन क्षेत्रों को CustomerBindingSource पर भी बाध्य किया है। जब कोई ग्राहक चुना जाता है, तो ये फ़ील्ड उस ग्राहक के गुणों को अपेक्षित दिखाते हैं।

मेरी समस्या तब होती है जब मैं एक नया कार्य आदेश कैप्चर करने के लिए फॉर्म का उपयोग करना चाहता हूं। मैं CustomerId == null के साथ WorksOrder ऑब्जेक्ट को तुरंत चालू करता हूं और इसे WorksOrderBindingSource पर बांधता हूं। CustomerBindingSource में Id == null के साथ मेरे पास कोई ऑब्जेक्ट नहीं है, इसलिए, जैसा कि अपेक्षित है, ड्रॉपडाउन कम्बोबॉक्स खाली है, लेकिन CustomerBindingSource.Current उस डेटासोर्स में पहले ग्राहक ऑब्जेक्ट में प्रॉपर्टी पॉइंट्स हैं। ग्राहक से जुड़े डिस्प्ले फ़ील्ड उस ग्राहक के लिए मूल्य दिखाते हैं, जबकि अभी तक कोई ग्राहक नहीं चुना गया है।

मेरे लिए यह एकमात्र कामकाज स्पष्ट है जो बेकार लगता है। इसमें, मेरे पास दो ग्राहक टाइप किए गए बाध्यकारी स्रोत हैं, एक चयनित ग्राहक के लिए, और ग्राहक प्रदर्शन फ़ील्ड को पॉप्युलेट करने के लिए, और दूसरा ग्राहक ड्रॉपडाउन को पॉप्युलेट करने के लिए। फिर, मुझे एक चयन ईवेंट को संभालना होगा, और केवल तभी जब कोई ग्राहक चुना जाता है, तो उस ग्राहक को डिस्प्ले फ़ील्ड के लिए बाध्यकारी स्रोत में ढूंढें, और यदि कोई भी नहीं चुना गया है, तो प्रदर्शन फ़ील्ड के लिए डेटा स्रोत को शून्य पर सेट करें। यह बहुत बेकार लगता है। क्या मैं चाहता हूं कि हासिल करने का कोई और तरीका है?

+0

बाध्यकारी स्रोत में "कृपया-चयन-एक-ग्राहक" आइटम क्यों नहीं जोड़ रहे हैं? – Bijan

+0

उपयोगकर्ता को वर्तमान संपादन को सहेजने के लिए मजबूर करने के बारे में क्या है ताकि वैध ग्राहक आईडी को आपके न्यूरो –

उत्तर

1

:

स्पष्टता के लिए, जब आप BindingSource.DataSource संपत्ति के रूप में वर्णित निर्धारित करते हैं, वहाँ आप बाद में किसी समय मूल डेटा स्रोत पुन: असाइन करने को रोकने कुछ भी नहीं है बिल्कुल मेरी समस्या के साथ लेकिन उत्तर को संतुष्ट किए बिना। मुझे यह एक पुराना विषय पता है लेकिन अल्लाह ..

मैं एक कामकाजी समाधान के साथ समाप्त हुआ: मैंने अपने बाइंडिंगसोर्स में एक [पोजिशन चेंज] ईवेंट जोड़ा (आपका ग्राहक बाइंडिंग स्रोत होगा)।

 private void CustomerBindingSource_PositionChanged(object sender, EventArgs e) 
    { 
     if(<yourCombobox>.SelectedIndex==-1) 
     { 
      CustomerBindingSource.SuspendBinding(); 
     } 
     else 
     { 
      CustomerBindingSource.ResumeBinding(); 
     } 
    } 
0

क्या मैं करने के लिए उपयोग "स्पष्ट" एक BindingSource बस इस तरह अपने डेटा स्रोत सेट करने के लिए है:

CustomerBindingSource.DataSource = typeof (ग्राहक);

उम्मीद है कि इससे मदद मिलती है।

संपादित करें: मैं इस विषय पाया

//Retrieve customers from database 
List<Customer> Customers = WhatEverCallToDB(); 
CustomerBindingSource.DataSource = Customers; 

... 

//Later we need to blank the Customer fields on the Windows Form 
CustomerBindingSource.DataSource = typeof(Customer); 

... 

//Then again at a later point we can restore the BindingSource: 
CustomerBindingSource.DataSource = Customers; 

... 
+1

पर असाइन किया गया हो, मैं बाध्यकारी स्रोत को साफ़ नहीं करना चाहता हूं। मैं यह जानना चाहता हूं कि बाध्यकारी स्रोत में कोई रिकॉर्ड नहीं चुना गया है, या 'सक्रिय' है। – ProfK

+0

मैंने सोचा था कि आपका मतलब था कि जब आप एक नया वर्कऑर्डर बनाते हैं, तो आप ग्राहक से संबंधित फ़ील्ड को "खाली" करना चाहते हैं। यदि ऐसा है, तो मेरी विधि काम करेगी, लेकिन अगर मैं आपके उपयोग के मामले को गलत समझता हूं, तो क्या आप स्पष्टीकरण दे सकते हैं? –

+1

मैं ग्राहक से संबंधित फ़ील्ड को खाली करना चाहता हूं, लेकिन मैं 'ग्राहक बाइंडिंगसोर्स.डेटा स्रोत' में ग्राहक रिकॉर्ड का सेट खोना नहीं चाहता हूं। मैं सिर्फ उन रिकॉर्ड्स में से कोई भी नहीं चाहता हूं। – ProfK

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