2012-02-23 24 views
3

我有一個組合框作爲用戶控件創建(它實際上由標籤,組合框和文本框組成)。我試圖綁定一個數據集的數據源組合框,但我一直ValueMember /顯示器件上收到錯誤消息:組合框問題:無法綁定到新的值成員

Cannot bind to the new display member - newdisplay member 
Cannot bind to the new value member - parameter name: value 

我原本以爲一切爲了用戶控件正確編碼:

public partial class ucComboBox : UserControl 
{ 
    #region Properties (6)  
    private bool isEditableReadOnly; 
    private bool ArrVisible; 
    private string _value; 
    private string _name; 

    public string value 
    { 
     get { return _value ; } 
     set { _value = value; } 
    } 
    public string name 
    { 
     get { return _name; } 
     set { _name = value; } 
    } 
} 

我在用戶控件中有一些其他屬性和事件,但他們不應該是問題。

我的代碼綁定的信息:

((ucComboBox)ctrl).combobox.DataSource = info; 
    ((ucComboBox)ctrl).combobox.ValueMember = "radiology_id"; 
    ((ucComboBox)ctrl).combobox.DisplayMember = "radiology_name"; 

它吹起來,每當它擊中值成員,我也得到上述的兩個錯誤。我在用戶控件中丟失了什麼?對我來說,這應該是工作..(fyi - 信息數據源確實包含兩列)

我試過了一堆不同的戰術,沒有成功。請幫忙!

謝謝

+1

什麼是'info'?你是否確定無論存儲在那裏有公共radiology_id和radiology_name? – kevev22 2012-02-23 21:40:15

+0

我很積極。我在設置之前查看數據集。 – Encryption 2012-02-23 21:47:10

+0

'info'是一個DataSet還是一個DataTable?如果它是一個DataSet,你將不得不將DataSource設置爲所需的DataTable:'DataSource = info.Tables [0];' – kevev22 2012-02-23 21:51:56

回答

0

從使用Datatset搬走中/值。創建了一個包含ID和名稱值的類(「設施」)。將「信息」更改爲列表類型。然後下面的代碼工作得很好:

info.Add(new Facilities { ID = dr["other_facility_id"].ToString(), Name = dr["other_facility_name"].ToString() }); 

    ((ucComboBox)ctrl).combobox.DataSource = new BindingSource(info, null);//info; 
    ((ucComboBox)ctrl).combobox.ValueMember = "ID"; 
    ((ucComboBox)ctrl).combobox.DisplayMember = "Name"; 

沒有綁定的問題。

+0

我在我的Id屬性上有一個[Browsable(false)]屬性的類,這似乎會導致ValueMember引發此錯誤。對於這個問題,這可能有點晚,但其他人可能沒有意識到這一點。 – icepicker 2015-03-09 07:28:35

1

當然下面的代碼片段會導致一個問題?

public string value 
{ 
    get { return _value ; } 
    set { _value = value; } 
} 

你需要命名這個東西,例如comboValue。 「值」表示傳遞給屬性聲明的隱式變量。

public string comboValue 
{ 
    get { return _value ; } 
    set { _value = value; } 
} 
+0

更改了名稱,仍然得到相同的兩個錯誤。 – Encryption 2012-02-23 21:46:43

+1

雖然命名「值」是一個不錯的選擇,但我認爲它並不相關 – 2012-02-23 21:49:19

+0

可以顯示數據源的代碼,即包含radiology_id和radiology_name屬性的信息對象嗎? (如果它不這樣做,那就是爲什麼它不工作...) – kaj 2012-02-23 21:56:08

0

我認爲你有你的財產組合,以不同的東西修飾符公共
但是我會選擇在usercontrol級別實現兩個新的公共屬性。
DisplayMemberValueMember只是爲了避免醜陋的演員。
在設置/ get訪問我會反映在內部組合

public string DisplayMember 
{ 
    get { return combobox1.DisplayMember; } 
    set { combobox1.DisplayMember = value;} 
} 
public string ValueMember 
{ 
    get { return combobox1.ValueMember; } 
    set { combobox1.ValueMember = value;} 
} 
+0

嘗試過這一點,但我認爲我是不會覆蓋正確的名稱。將再次工作。 – Encryption 2012-02-23 22:13:32

+0

仍然不喜歡那個代碼。在運行這些屬性時獲取相同的錯誤消息...呃。 – Encryption 2012-02-23 22:50:33

+0

我可以問你在usercontrol的designer.cs中顯示相關的代碼嗎?這裏有什麼不對勁。 – Steve 2012-02-23 23:00:04

8

同時確保ID和Name屬性是公共否則你得到的錯誤:
Cannot bind to the new display member.

+2

謝謝!你只需要額外的幾個小時就可以解決這個問題。 – Epaga 2013-06-14 06:56:30

+0

@Epaga很高興幫助:) – 2013-06-14 09:48:50

+0

謝謝。在我的情況下,我有一個工作系統,並將我的一些對象改爲內部而不是公開。這打破了約束,改變他們回到公共固定它。再次感謝。 – 2015-01-10 23:40:31

2

我有同樣的問題,而結合。我扭轉了秩序,一切開始工作。 原始代碼看起來像這樣

((ucComboBox)ctrl).combobox.ValueMember = "radiology_id"; 
    ((ucComboBox)ctrl).combobox.DisplayMember = "radiology_name"; 
    ((ucComboBox)ctrl).combobox.DataSource = info; 
+0

爲我工作,但爲什麼?它正在工作,而數據背後的數據是String。當重構爲字符串[] - 停止工作= | – 2016-06-30 08:30:35

0

我有同樣的問題,並發現可能不適用於你的問題的解決方案,但可能對他人有所幫助:

標有[Browsable(false)]的屬性 - 試圖綁定到它時,屬性也會導致此異常。