2015-02-24 52 views
1

我很難理解爲什麼我的數據綁定似乎不適用於我的自定義類。我做了(被黑客攻擊)我的類擴展了Control類來添加數據綁定功能,但它實際上並沒有綁定到我的自定義屬性。自定義控件的數據綁定將無法正常工作?

我爲我的自定義類的代碼是:

public class RadioButtonSet : System.Windows.Forms.Control 
    { 

     private Dictionary<System.Windows.Forms.RadioButton, int> buttonList; 
     private int selectedValue; 

     public RadioButtonSet() 
     { 
      buttonList = new Dictionary<System.Windows.Forms.RadioButton, int>(); 
     } 

     public void AddButton(System.Windows.Forms.RadioButton button, int buttonValue) 
     { 
      if (this.buttonList.ContainsKey(button)) 
       throw new Exception("Button set already contains specified button"); 
      else if (buttonValue <= 0) 
       throw new Exception("Cannot add specified key to button set"); 
      else if (button == null) 
       throw new Exception("Parameter button cannot be null"); 
      else 
      { 
       button.CheckedChanged += button_CheckedChanged; 
       this.buttonList.Add(button, buttonValue); 
      } 
     } 

     private void setSelectedButton() 
     { 
      this.buttonList.FirstOrDefault(x => x.Value == this.selectedValue).Key.Checked = true; 
     } 

     private void button_CheckedChanged(object sender, EventArgs e) 
     { 
      System.Windows.Forms.RadioButton btn = sender as System.Windows.Forms.RadioButton; 
      this.selectedValue = this.buttonList[btn]; 
     } 

     public int SelectedButton 
     { 
      get 
      { 
       return selectedValue; 
      } 
      set 
      { 
       selectedValue = value; 
       setSelectedButton(); 
      } 
     } 

    } 

我嘗試使用以下,其中rbs_admin是我的自定義類的實例綁定到這個類:

rbs_admin.DataBindings.Add (「SelectedButton」,datatable,「admin」);

我不知道什麼信息可以幫助所以這裏。

我從數據適配器填充的數據表中獲取綁定信息。這個自定義類不在它自己的文件中,它是我的項目中另一個靜態類的一部分。

我只是不明白,因爲我創建了具有相同的自定義屬性的自定義文本框,它綁定並正常工作。

任何幫助,非常感謝。

+0

你的綁定是正確的,但你錯過了一個事實,即你需要通過數據表來設置一個選定的行,以便用戶控件更新它的綁定。 – 2015-02-24 03:50:12

回答

1

林談論這樣的事情:

someListControl.DataSource = datatable; 
someListControl.DisplayMember = "someAnotherColumnName" 

rbs_admin.DataBindings.Add("SelectedButton", datatable, "admin"); 

然後從列表控件中選擇一個項目會導致你的控制,其結合根據所選項目進行更新。

+0

我明白你的意思,但我不明白你的例子。什麼是someListControl?什麼是一些其他列名?它是否必須與我在數據表中綁定的列相同? – user2992802 2015-02-24 12:11:54

+0

someListControl將是您的窗體中的另一個控件,它將用作導航控件。然後someAnotherColumnName將是您的數據表中的一列,允許您識別並從多行中選擇一個項目,例如UserNameColumn。我想你的數據表將有多列(也有多行)。 – 2015-02-24 14:08:00

+0

啊我明白了。不是這種情況。我道歉。我忽略了提及這個表單將被用於編輯或創建單個記錄(行)。在這種情況下是特定的用戶。我查詢數據庫,並將表單上的控件綁定到查詢中的各種用戶關聯值。因此,我的數據表中只會有一個或更少(如果創建一個新用戶)記錄。我試圖實現這個類,這樣我就可以將「adminLevel」int值綁定到與我的集合中的值相關聯的指定單選按鈕。 – user2992802 2015-02-24 14:38:51