2009-04-02 8 views
5

सूची बॉक्स से चयनित आइटम को कैसे हटाया जाए जब डेटासॉर को C# में असाइन किया गया हो?जब कोई डेटा स्रोत इसे C# में असाइन किया जाता है तो ListBox से चयनित आइटम को कैसे निकालें?

जब हटाने की कोशिश कर, मिला त्रुटि

"आइटम संग्रह जब डेटा स्रोत संपत्ति सेट कर दिया जाता बदला नहीं जा सकता।"


लेकिन जब मैं डेटा स्रोत (datatable) से आइटम को हटाने के लिए,

यह त्रुटि thorws के रूप में "DataRow वर्तमान पंक्ति संग्रह में नहीं है" का प्रयास करें।

उत्तर

9

उस आइटम को डेटासोर्स ऑब्जेक्ट में ढूंढें और इसे हटा दें, फिर ListBox को दोबारा बांधें।

संपादित:

यहाँ आप कैसे अपने डेटा स्रोत के रूप में एक DataTable से हटाते हैं, नेट संस्करण की परवाह किए बिना है।

DataRowView rowView = listBox.SelectedItem as DataRowView; 

if (null == rowView) 
{ 
    return; 
} 

dt.Rows.Remove(rowView.Row); 

मैं WinForms DataGridViews के अलावा और कुछ के साथ प्रयास नहीं किया है, लेकिन मैं अत्यधिक BindingListView की सलाह देते हैं, जो दोनों की तुलना में DataTables/दृश्य तेजी से होता है और आप अपने डेटा स्रोत के रूप में सामान्य सूची बाध्य करने के लिए < टी > रों अनुमति देता है।

+0

काम किया लेकिन जब मैं "के रूप में DataRow वर्तमान पंक्ति संग्रह में नहीं है" डेटा स्रोत (datatable) से आइटम को हटाने के लिए, यह त्रुटि thorws प्रयास करें। – Dhana

+0

क्या यह WinForms या ASP.NET है? आप .NET ढांचे का किस संस्करण का उपयोग कर रहे हैं? –

0

ListBox एक डेटा स्रोत सौंपा गया है, तो आप डेटा स्रोत से आइटम निकालने चाहिए और उसके बाद ListBox

0

आप नियंत्रण के आइटम संग्रह के बजाय डेटा स्रोत संशोधित करने की आवश्यकता rebind। आप जिस प्रकार के डेटा स्रोत के लिए बाध्यकारी हैं, इस पर निर्भर करते हुए, आपको अलग-अलग चीजें करने जा रही हैं ताकि आपके यूआई अपडेट हो जाएं।

सबसे अच्छा तरीका एक संग्रह है जो आपकी आवश्यकताओं को फिट करता है और आईबींडिंगलिस्ट या आईबीआईंडिंग लिस्टव्यू लागू करता है। वे दो इंटरफेस ऐसे हैंडलर भी लागू करते हैं जो संग्रह संग्रहित ईवेंट सुनते हैं और तदनुसार आपके यूआई को अपडेट करते हैं।

यदि आपका संग्रह उन इंटरफेस का समर्थन नहीं करता है, तो आपको हर बार किसी आइटम को जोड़/हटाए जाने पर आपके डेटा स्रोत को फिर से बांधना होगा।

2

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

0

यह अलग-अलग है, सूची बॉक्स उदाहरण के लिए एक नया रिक्त मान असाइन करें ..

मंद एबीसी ListBox कार्यान्वयन नई सूची (स्ट्रिंग के)()

ListBox1.DataSource = एबीसी

रूप
0

bugged है, तो आप घटक के लिए एक नया डेटा स्रोत उदाहरण बनाने के लिए यह एक पहचान करने के लिए के लिए की जरूरत है परिवर्तन।

उदाहरण के लिए:

ActivitiesList.DataSource = _activities; 

_activities = new List<Activity>(_activities); 
_activities.Remove((Activity)ActivitiesList.SelectedItem); 

ActivitiesList.DataSource = _activities; 
1

जब आप संदेश मिलता है "जब डेटा स्रोत संपत्ति सेट कर दिया जाता आइटम संग्रह संशोधित नहीं किया जा सकता है।" डेटासोर्स को किसी अन्य चीज़ पर सेट करना, रिक्त सूची या शून्य, कोड प्रारंभिक समाप्ति पूर्ण नहीं होने पर मदद नहीं करता है।

उस त्रुटि से बचने के लिए, किसी को डेटा लोड या उसके बाद फॉर्म लोड के दौरान आइटम सूची में परिवर्तन करना होगा।

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

0

जबकि क्रिस डॉगेट ने एक वैध समाधान पोस्ट किया था, इसका उपयोग करते समय मैं समस्याओं में भाग गया। उस विधि का उपयोग करके यह बाद में GetChanges (DataRowState.Deleted) को ठीक से काम करने की अनुमति नहीं दे रहा था।

मेरी समस्या को बेहतर ढंग से हल करने के लिए, मुझे केवल एक पंक्ति - अंतिम पंक्ति को बदलना पड़ा।

DataRowView rowView = listBox.SelectedItem as DataRowView; 

if (null == rowView) 
{ 
    return; 
} 

rowView.Row.Delete(); 

इसने मेरे GetChanges को ठीक से काम करने की अनुमति दी।

0

इस के लिए मुझे

 DataTable temp = (DataTable)lstBlocks.DataSource; 
     temp.Rows.RemoveAt(position); 
संबंधित मुद्दे