WinForms कॉम्बोबॉक्स डेटा बाध्यकारी गोचा

मान लें कि आप निम्न की तरह कुछ कर रहे हैं

List myitems = new List
{
    "Item 1",
    "Item 2",
    "Item 3"
};

ComboBox box = new ComboBox();
box.DataSource = myitems;

ComboBox box2 = new ComboBox();
box2.DataSource = myitems

तो अब हमारे पास उस सरणी के लिए 2 कॉम्बो बक्से हैं, और सब कुछ ठीक काम करता है। लेकिन जब आप एक कॉम्बो बॉक्स के मान को बदलते हैं, तो यह आपके द्वारा चुने गए दोनों को कॉम्बो बॉक्स बदल देता है।

अब, मुझे पता है कि Arrays हमेशा संदर्भ द्वारा पारित किया जाता है (सीखा है कि जब मैंने सी: डी सीखा), लेकिन क्यों कॉम्बो बॉक्स एक साथ बदल जाएगा? मुझे विश्वास नहीं है कि कॉम्बो बॉक्स नियंत्रण संग्रह को संशोधित कर रहा है।

चारों ओर एक काम के रूप में, यह उस funcionality प्राप्त नहीं होगा जो अपेक्षित / वांछित है

ComboBox box = new ComboBox();
box.DataSource = myitems.ToArray();
0
जोड़ा संपादित
विचारों: 1

3 उत्तर

यह डॉटनेट ढांचे में विशेष रूप से बाइंडिंग कॉन्टेक्स्ट में डेटा बाइंडिंग सेट अप करने के साथ करना है। उच्च स्तर पर इसका अर्थ यह है कि यदि आपने अन्यथा प्रत्येक फॉर्म निर्दिष्ट नहीं किया है और फ़ॉर्म के सभी नियंत्रण समान बाइंडिंग कॉन्टेक्स्ट साझा करते हैं। जब आप DataSource प्रॉपर्टी सेट कर रहे हैं तो ComboBox ConcurrenyMangager प्राप्त करने के लिए BundContext का उपयोग करेगा जो सूची को लपेटता है। ConcurrenyManager सूची में वर्तमान चयनित स्थिति के रूप में ऐसी चीजों का ट्रैक रखता है।

जब आप दूसरे <�कोड> कॉम्बोबॉक्स के डेटा स्रोत को सेट करते हैं, तो यह उसी बाइंडिंग कॉन्टेक्स्ट (रूपों) का उपयोग करेगा जो एक ही <�कोड का संदर्भ देगा > ConcurrencyManager उपरोक्त के रूप में डेटा बाइंडिंग सेट अप करने के लिए उपयोग किया जाता है।

अधिक विस्तृत स्पष्टीकरण प्राप्त करने के लिए बाइंडिंग कॉन्टेक्स्ट देखें।

0
जोड़ा
कोई लाभ प्रदान करने के लिए बहुत सारे प्रयासों की तरह लगता है और डेटा बाध्यकारी नियंत्रण पूरी तरह से सहज ज्ञान युक्त काउंटर बनाते हैं।
जोड़ा लेखक Belmiris, स्रोत

एक बेहतर कामकाज (डेटासोर्स के आकार के आधार पर) दो <�कोड> बाध्यकारी स्रोत </कोड> ऑब्जेक्ट्स (2.00 के रूप में नया) घोषित करना है और उनको संग्रह को बांधें और फिर उन्हें comboboxes से बांधें।

मैं एक पूरा उदाहरण संलग्न हूँ।

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        private BindingSource source1 = new BindingSource();
        private BindingSource source2 = new BindingSource();

        public Form1()
        {
            InitializeComponent();
            Load += new EventHandler(Form1Load);
        }

        void Form1Load(object sender, EventArgs e)
        {
            List myitems = new List
            {
                "Item 1",
                "Item 2",
                "Item 3"
            };

            ComboBox box = new ComboBox();
            box.Bounds = new Rectangle(10, 10, 100, 50);
            source1.DataSource = myitems;
            box.DataSource = source1;

            ComboBox box2 = new ComboBox();
            box2.Bounds = new Rectangle(10, 80, 100, 50);
            source2.DataSource = myitems;
            box2.DataSource = source2;

            Controls.Add(box);
            Controls.Add(box2);
        }
    }
}

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

0
जोड़ा
मुझे इसके साथ कुछ अजीब अनगिनत बग मिल गई हैं। सबसे खराब स्थिति यह है कि एक combobox किसी भी अन्य नियंत्रण पर वापस अपना ध्यान देने से इंकार कर दिया: डी
जोड़ा लेखक Quibblesome, स्रोत
यह संकेत करने के लिए धन्यवाद कि कुछ वास्तव में जिज्ञासु बग में निर्माता परिणाम में बाध्यकारी परिणाम। मुझे एक ही समस्या थी और मैंने अपना कोड लोड इवेंट में ले जाया और यह बाध्य डेटा दिखाया।
जोड़ा लेखक bunggo, स्रोत

यह सिर्फ एक टाइपो हो सकता है, लेकिन आपके द्वारा प्रदान किए गए कोड में आप केवल डेटासोर्स सेट करते समय पहले कॉम्बो बॉक्स का संदर्भ देते हैं:

ComboBox box = new ComboBox();
box.DataSource = myitems;

ComboBox box2 = new ComboBox();
**box**.DataSource = myitems

box2 के लिए डेटास्रोत सेट नहीं है।

0
जोड़ा