WinForms ComboBox veri bağlama gotcha

oy
44

aşağıdaki gibi bir şey yapıyoruz varsayalım

List<string> myitems = new List<string>
{
    Item 1,
    Item 2,
    Item 3
};

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

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

Şimdi biz bu diziyi bağlı 2 açılan kutular var ve her şey çalışıyor. Bir açılan kutu değerini değiştirdiğinizde Ancak, sadece seçilen birine İKİ açılan kutular değiştirir.

Şimdi, (i C öğrenince öğrendim: D) diziler her zaman başvuruya göre iletilir biliyorum, ama neden yeryüzünde açılan kutuları birlikte değişirdi? Açılan kutu denetimi koleksiyonu değiştiriyorsa inanmıyorum.

Geçici bir çözüm olarak, bu istenen beklenen Funcionality / elde edeceğini yok

ComboBox box = new ComboBox();
box.DataSource = myitems.ToArray();
Oluştur 02/08/2008 saat 17:09
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
37

Bu veri bağlamaları özellikle dotnet çerçevesinde nasıl ayarlanır ile ilgisi var BindingContext. Yüksek düzeyde, demektir aksi her formu belirtilen ve form payı tüm kontrolleri aynı değil eğer BindingContext. Eğer ayarlarken DataSourceözelliğini ComboBoxkullanacağı BindingContextbir olsun ConcurrenyMangagerlisteyi sarar söyledi. ConcurrenyManagerListede seçilen geçerli pozisyon gibi şeyler izler.

Ayarladığınızda DataSourceikinci ComboBoxaynı kullanır BindingContextaynı başvuru verim olan (formlar) ConcurrencyManagerveri bağlantıları kurmak için kullanılan yukarıda.

Daha detaylı bir açıklama bkz almak için BindingContext .

Cevap 02/08/2008 saat 18:18
kaynak kullanıcı

oy
20

(Veri kaynağı boyutuna bağlı olarak) daha iyi bir çözüm, iki beyan etmektir BindingSourcenesneleri (2.00 yeni) kişilerce toplama bağlanan ve daha sonra comboboxes için bu bağlanır.

Tam bir örneği alın.

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<string> myitems = new List<string>
            {
                "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);
        }
    }
}

Kendini şaşırtmak istiyorsanız daha sonra yapıcı içinde bağlamaları ilan daima deneyin. Yani bazı yol açabilir gerçekten dolayısıyla hep Load olayı bağlamak, meraklı böcek.

Cevap 21/08/2008 saat 15:48
kaynak kullanıcı

oy
2

Bu sadece bir yazım hatası olabilir, ama kodda Eğer veri kaynağı ayarlarken sadece ilk açılan kutu başvuru sağlanan:

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

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

Için veri kaynağı box2ayarlanmamış.

Cevap 21/08/2008 saat 18:12
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more