2009-09-14 12 views
5

मैं इस सेटिंग को नियंत्रण को प्रभावित करने की अपेक्षा कर रहा था, लेकिन मैं DataUridView को AllowUserToAddRows के साथ सत्य पर सेट करके केवल नई पंक्तियां नहीं जोड़ सकता। क्या मैं बस अपने माउस और कीबोर्ड का उपयोग करने पर बकवास कर रहा हूं, या क्या मैंने इस संपत्ति को पूरी तरह गलत समझा है? मुझे संदेह है कि यह बाद वाला है, हालांकि मुझे सही दिशा में इंगित करने के लिए प्रलेखन के तरीके में बहुत कुछ नहीं मिल रहा है।DataGridView - AllowUserToAddRows क्या करता है?

संपादित करें: वैसे, यह नहीं है कि मैं बकवास हूं, ऐसा लगता है कि डेटाग्रिड व्यू के डेटासोर्स के रूप में सूची का उपयोग करने के साथ कुछ ऐसा लगता है; छोटे '*' बस प्रकट नहीं होता है अगर मैं एक सूची से बांधता हूं।

उत्तर

4

पर एक नज़र मैं एक BindingList करने के लिए एक सूची से STMTTRN बदलकर इस हल डालें - सूची में कुछ बहुत ही अजीब व्यवहार के लिए लगता है जब डेटासोर्स के रूप में उपयोग किया जाता है (मेरा दूसरा हालिया प्रश्न देखें, जिसे एक ही तरीके से हल किया जाता है)।

यह उत्पन्न कोड में है, लेकिन मैं पहले से ही एक सूची के लिए एक सरणी से इसे बदल चाहते हैं तो BindingList मुश्किल से किसी भी अतिरिक्त मुसीबत :)

2

यह प्रयास करें,

DataTable dt = new DataTable(); 
dt.Columns.Add("No", typeof(int)); 
dt.Columns.Add("Name"); 
dataGridView1.AllowUserToAddRows = true; 
dataGridView1.EditMode = DataGridViewEditMode.EditOnKeystroke; 
dataGridView1.DataSource = dt; 

संपादित करें:

IBindingList

+0

मैंने आपके कोड की कोशिश की और यह काम किया, इसलिए धन्यवाद :) लेकिन मैं वास्तव में डेटासोर्स के रूप में एक सूची का उपयोग कर रहा हूं, जो (क्योंकि यह एकमात्र अंतर है) शायद मेरी समस्या का कारण है। क्या आपको पता है कि एक सूची 'ऐड पंक्ति' कार्यक्षमता क्यों काम नहीं करेगी? –

+0

लागू ** आईबीआईंडिंगलिस्ट ** इंटरफ़ेस। – adatapost

0

मैं एक ही समस्या थी है।

डीजीवी डेटासोर्स के रूप में बाध्यकारी स्रोत का उपयोग करके और बाइंडिंग स्रोत प्रॉपर्टी को अनुमति देना AllowNew = True, मेरी समस्या हल हो गई।

Dim binding As New BindingSource 
binding.DataSource = myList 
binding.AllowNew = True 
With DataGridView1 
    .AutoGenerateColumns = False 
    .DataSource = binding 
End With 
2

एक ही समस्या मेरे लिए के रूप में अच्छी है, और BindingList इसे हल नहीं किया, लेकिन मर्लिन जवाब मुझे एक अंतिम समाधान की दिशा में एक संकेत दिया था।

BindingSource में सूची को लपेटना समाधान का एक महत्वपूर्ण हिस्सा है (साथ ही अन्य प्रश्न में दस्तावेज: Can't Allow User To Add Rows to DataGridView with List<> Datasource)।

और मेरे लिए, गायब कदम यह था कि की कक्षा में मेरी सूची में ऑब्जेक्ट्स में सार्वजनिक पैरामीटर रहित कन्स्ट्रक्टर नहीं था। अपेक्षित कार्य करने के लिए पैरामीटर रहित कन्स्ट्रक्टर AllowUserToAddRows सक्षम करना।

मैं एक अपवाद है जो उठाया गया था जब मैं मर्लिन जवाब करने की कोशिश की से सुराग मिल गया है, जिनमें से संदेश चलता है कि यह भी AddingNew घटना से निपटने के द्वारा जोड़ने पंक्ति सक्षम करने के लिए संभव हो सकता है:

AddNew नहीं किया जा सकता 'माईटाइप' प्रकार पर बुलाया गया। इस प्रकार में सार्वजनिक डिफ़ॉल्ट कन्स्ट्रक्टर नहीं है। यदि आप AddingNew ईवेंट को संभालते हैं और उचित ऑब्जेक्ट बनाते हैं तो आप 'MyType' प्रकार पर AddNew को कॉल कर सकते हैं।

मैं यह कोशिश नहीं की, सौभाग्य से जोड़ने के रूप में एक सार्वजनिक parameterless निर्माता मेरे लिए कोई समस्या नहीं था, लेकिन यह जो एक parameterless निर्माता नहीं जोड़ सकते हैं किसी और के लिए आशा का एक संदेश है।