Combobox.SelectetItem verändert sich ungewollt



  • so ich habe ein problem: in meiner Anwendung habe ich zwei Comboboxen(ctrl_cbPerson1 und ctrl_cbPerson2), und nun das Problem: wenn ich den Inhalt einer Combobox ändere, ändere ich den Inhalt der andern komischerweise automatisch mit!
    hier mal die für das problem wichtigsten teile meines codes:

    public MainForm()
            {
                this.ctrl_cbPerson1.DisplayMember = "Name";
                this.ctrl_cbPerson1.DataSource = PersonInfo.personen;
                this.ctrl_cbPerson2.DisplayMember = "Name";
                this.ctrl_cbPerson2.DataSource = PersonInfo.personen;
            }
    

    noch sind das die einzigen beiden Stellen inerhalb der MainForm.cs datei die auf ctrl_cbPerson1 b.z.w. ctrl_cbPerson2 zugreifen.
    wie ihr seht binde ich beide an dieselbe List<PersonInfo>

    class PersonInfo
    {
        public static List<PersonInfo> personen;
        public String Name
        {
            get {return this.name;}
            set {this.name = value;}
        }
        private String name;
    }
    

    kann mit jmd sagen, wie ich es schaffe, dass sich die beiden ComboBoxen sich unabhänig voneinander einstellen lassen?



  • Dann benötigst du auch zwei verschiedene Instanzen der DataSource (PersonInfo.personen). Evtl. hilft es aber zwei unterschiedliche BindingSource-Instanzen zu verwenden, welche dann wiederum beide auf dieselbe Liste verweisen?



  • danke ich werd das mal testen wie das geht mit den
    zwei unterschiedliche BindingSource-Instanzen zu verwenden, welche dann wiederum beide auf dieselbe Liste verweisen.



  • Danke, das hat geklsppt, aber nun hab ihc eine neues Problem: wenn ich die List iwie verändere, z.B. indem ich der List ein neues Item hinzufüge werden die Comboboxen nicht automatisch aktualisiert, also das neue ietm, steht dann in den Comboboxen nicht zur Auswahl.



  • Das unterstützt die ComboBox nicht.

    Du müßtest dann immer wieder die DataSource neu zuweisen:

    comboBox.DataSource = null; // zuerst zurücksetzen (damit Änderung angenommen wird)
    comboBox.DataSource = bindingSource;
    

    Evtl. reicht auch einfach die BindingSource.DataSource neu zu setzen...
    (eine vorherige Auswahl (selection) der ComboBox müßtest du dir merken und danach wieder neu zuweisen)

    Edit: evtl. würde es mit einem IBindingList (bei BindingSource.DataSource) funktionieren, dies ist aber ein etwas größerer Aufwand (da 15 Methoden implementiert werden müssen).



  • hmm ich hatte gehoffe es anders machen zu können, aebr dann werd ichs wohl mal so machen.



  • In WPF gibt es dafür die ObservableCollection<T>, die hat ICollectionChanged implementiert.
    BindingList<T> gibt es auch noch. Weiß nicht ob es das auch für Forms gibt.


Anmelden zum Antworten