मेरे पास Dictionary
है जिसमें आइटम और कीमतें हैं। आइटम अद्वितीय हैं लेकिन धीरे-धीरे एप्लिकेशन के जीवनकाल के माध्यम से जोड़ा और अद्यतन किया जाता है (यानी, मैं आइटम स्ट्रिंग को पहले से नहीं जानता)। मैं एक DataGridView को यह संरचना बाध्य करने के लिए चाहते हैं, इसलिए मैं अपने फार्म पर अपडेट, जैसे कुछ दिखा सकते हैं: Dictionary
के बाद सेडेटाग्रिड व्यू एक शब्दकोश से बंधे
Dictionary<string, double> _priceData = new Dictionary<string, double>();
BindingSource _bindingSource = new BindingSource();
dataGridView1.DataSource = _bindingSource;
_bindingSource.DataSource = _priceData;
लेकिन नहीं कर सकते हैं, IList
(या IListSource
, IBindingList
, या IBindingListView
) को लागू नहीं करता है।
क्या यह हासिल करने का कोई तरीका है? मुझे वस्तुओं की एक अनूठी सूची रखना है, लेकिन मौजूदा आइटम के लिए कीमत भी अपडेट करना है, इसलिए Dictionary
आदर्श डेटा संरचना है जो मुझे लगता है, लेकिन मुझे अपने फॉर्म पर डेटा प्रदर्शित करने का कोई तरीका नहीं मिल रहा है।
अद्यतन: नीचे
मार्क के सुझाव बहुत अच्छी तरह से काम करता है, लेकिन मैं अभी भी निष्पादन के दौरान DataGridView अपडेट करने का तरीका यकीन नहीं है।
private DictionaryBindingList<string, decimal> bList;
तब का दृष्टांत कि Main()
में:
bList = new DictionaryBindingList<string,decimal>(prices);
dgv.DataSource = bList;
तब प्रोग्राम निष्पादन करता है, तो एक नई प्रविष्टि शब्दकोश में जोड़ा जाता है के दौरान:
prices.Add("foobar", 234.56M); bList.ResetBindings();
मैं एक वर्ग-स्तर चर है
मैंने सोचा कि डेटाग्रिड व्यू रीफ्रेश करेगा। क्यों नहीं?
- "मूल्य" के लिए आप सामान्य रूप से दशमलव, दोगुना –
अपनी टिप्पणी फिर से अपडेट किया गया नहीं इस्तेमाल करना चाहिए; जब तक हम <,> शब्दकोश उप-वर्गीकृत नहीं करते हैं, तो यह जानने का कोई आसान तरीका नहीं है कि आपने कोई आइटम जोड़ा है; इसके बजाए, मैंने एक रीसेट() विधि (उदाहरण के उपयोग के साथ) जोड़ा है जो सूची को फिर से पॉप्युलेट करता है। उदाहरण के लिए फॉर्म के निचले भाग में बटन देखें। –