2009-10-29 13 views
1

我有一個WinForm應用程序,每個行都包含一個包含ComboBox的網格。所有都綁定到相同的集合(集合可能會改變,這就是爲什麼我不想爲每個組合都有不同的集合,也是內存成本)。問題是,當我在一個組合中選擇一個對象時,它將更改每個組合中的選定對象。 這是一個您可以運行並輕鬆再現的代碼。.Net上的錯誤行爲控件數據源屬性

public Form1() 
     { 
      InitializeComponent(); 

      this.comboBox1 = new System.Windows.Forms.ComboBox(); 
      List<int> numList = new List<int>(){1,2,3,4}; 
      this.comboBox1.FormattingEnabled = true; 
      this.comboBox1.Location = new System.Drawing.Point(33, 169); 
      this.comboBox1.Name = "comboBox1"; 
      this.comboBox1.Size = new System.Drawing.Size(126, 21); 
      this.comboBox1.TabIndex = 3; 
      this.comboBox1.DataSource = numList; // BINDING TO NUMLIST 

      this.comboBox2 = new System.Windows.Forms.ComboBox(); 
      this.comboBox2.FormattingEnabled = true; 
      this.comboBox2.Location = new System.Drawing.Point(243, 367); 
      this.comboBox2.Name = "comboBox2"; 
      this.comboBox2.Size = new System.Drawing.Size(126, 21); 
      this.comboBox2.TabIndex = 4; 
      this.comboBox2.DataSource = numList; // BINDING TO NUMLIST (THE SAME LIST 

      this.Controls.Add(this.comboBox2); 
      this.Controls.Add(this.comboBox1); 
     } 

只是做一個表格並粘貼組合框1和2 任何想法這可怎麼發生的聲明。我的意思是如果它是一個簡單的列表,它不會跟蹤選定的對象。 DataSource背後發生了什麼?

+5

我真的很討厭她,那是指行爲小姐! – leppie 2009-10-29 16:07:35

+0

我其實讀過這個問題,因爲我有興趣去見她。 – Paddy 2009-10-29 16:52:37

回答

4

只要您使用相同的數據源參考,貨幣管理器就會共享。一個關鍵是要設定每個控制的結合上下文:

ctrl.BindingContext = new BindingContext(); 

另一種選擇是通過用不同的BindingSource用於每個控制抽象使用差的引用,例如。

+0

非常感謝!!!!!!!這爲我節省了很多時間,不必單獨更新每個列表。也想感謝所有其他人,這是有趣的文章閱讀.. – jmayor 2009-10-29 16:26:51

0

當您想要綁定時,請使用linq ToList()方法。這將創建一個新的列表,所以他們將變得不相關。

+0

對不起,它沒有工作..它繼續發生相同的......我認爲這是創建在DataSource後面,並使所有組合框指向相同的東西,但我可以告訴... – jmayor 2009-10-29 16:08:42

+0

對不起,雖然你希望能夠編輯你的列表,並改變這兩個列表。我誤解了關於這兩個同時變化的部分。 – 2009-10-29 16:10:17

5

如果綁定到相同的列表,那麼您需要使用單獨的列表,這是預期的行爲。

+0

爲什麼會是默認行爲?想象一下,我有10K行?我需要有10K的列表嗎?除此之外,如果我綁定一個簡單的通用集合列表,它使得它似乎如果列表跟蹤選定的對象..它是一個簡單的列表...我會承擔這個,如果它會像和ObservableCollection或某種查看對象。 – jmayor 2009-10-29 16:13:43

+0

@jmayor - 「CurrencyManager用於保持數據綁定控件彼此同步(顯示來自同一記錄的數據).ModalManager對象通過管理由數據源提供的綁定數據的集合來完成此操作。」 – 2009-10-29 16:16:10

相關問題