2009-04-29 16 views
6

मुझे निम्न संदेश मिल रहा है जब मैं डेटाग्रिडव्यू में अंतिम आइटम को निकालने का प्रयास करता हूं।सूची में अंतिम आइटम को हटाते समय डेटाबेस पर अमान्य ऑपरेशन अपवाद

डेटा बाइंडिंग सभी बाइंडिंग के लिए उपयुक्त सूची में एक पंक्ति नहीं मिल सकती है।

मेरे पास मेरे बाध्यकारी सेटअप निम्नानुसार हैं।

ExtendedBindingList<MyClass> bl = new ExtendedBindingList<MyClass>(GetDataFromDB()); 
BindingSource bs = new BindingSource(); 
bs.DataSource = bl; 
dgv.DataSource = bs; 

ExtendedBindingList बस कुछ सरल मैं एक साथ फेंक दिया छँटाई लागू करने के लिए और फ़िल्टरिंग और कुछ बुनियादी राज्य हठ है। डीजीवी डाटाग्रिड व्यू है। GetDataFromDB MyClass की एक सूची देता है।

समस्या केवल उठता है जब मैं DataGridView का उपयोग करने से पिछले आइटम दूर करने की कोशिश:

bs.RemoveCurrent(); 

जो अन्य हर समय काम करता है। समाधान के लिए मेरा एकमात्र संकेत सभी बाइंडिंग को हटाने और उन्हें पुनः लागू करना है, लेकिन यह एक आदर्श समाधान की तरह प्रतीत नहीं होता है।

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

तो, मैं यहां कुछ मदद के लिए SO पूछ रहा हूं :)।

अग्रिम धन्यवाद, जस्टिन

उत्तर

0

यहाँ है कि कैसे मैं एक ग्रिड से पंक्ति चयनित को हटाएं:

private void btnDelete_Click(object sender, EventArgs e) 
{ 
    if (grid.CurrentRow == null) return; 
    var selectedItem = grid.CurrentRow.DataBoundItem as PartGroup; 
    if (selectedItem != null && 
    UIHelper.ShowQuestion("Are you sure you want to delete selected row?") == System.Windows.Forms.DialogResult.Yes) 
    { 
    groups.Remove(selectedItem); 
    } 
}

समूहों (टी का) मेरी BindingListEx है।

उम्मीद है कि यह मदद करता है।

+0

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

+0

यह मेरे उदाहरण में एक DataGridView है। बाइंडिंगसोर्स का भी उपयोग किया जाता है, लेकिन मैं बाध्यकारी स्रोत से नहीं, बाध्यकारी सूची से हटा देता हूं। बस इस कोड को आजमाएं। मुझे यह भी लगता है कि आपकी समस्या किसी भी तरह से अंतिम पंक्ति से संबंधित है जो तेजी से पंक्तियों को जोड़ने के लिए है (AllowUserAddNewRows = true)। मुझे याद है कि मुझे इसके साथ कोई समस्या थी और फिर मैंने इसे बंद करने का निर्णय लिया (AllowUserAddNewRows को गलत पर सेट करें)। – nightcoder

+0

हम्म, मैं इसे आज़मा दूंगा। –

0

[क्षमा करें, वास्तव में नहीं एक जवाब है, लेकिन मुझे लगता है कि यह महत्वपूर्ण है के बाद से कोई जवाब नहीं दिया गया था।]

मैं NET कम्पैक्ट फ्रेमवर्क 2.0 का उपयोग कर ठीक उसी स्थिति हो रही थी। परीक्षण ने उस बिंदु पर इसका पता लगाया जहां एक न्यूमेरिक अपडाउन। डेटाबाइंडिंग्स। जोड़ें() का उपयोग स्रोत पर नियंत्रण को बांधने के लिए किया गया था। इस बिंदु के बाद, RemoveCurrent() का उपयोग करके त्रुटि उत्पन्न होगी यदि आइटम स्रोत में अंतिम था। उस बाध्यकारी से पहले (या अगर इसे छोड़ दिया गया था), त्रुटि कभी प्रकट नहीं होगी।

अन्य नियंत्रण इसी स्रोत से जुड़े थे - टेक्स्टबॉक्स और कॉम्बोबॉक्स - लेकिन उन्होंने इस व्यवहार का कारण नहीं बनाया। केवल न्यूमेरिक अपडाउन नियंत्रण।