2011-10-12 48 views
2

我有一個可編輯的組合框,在Text屬性上進行驗證,以確保手動輸入的信息有效。如何使用ValueMember填充ComboBox編輯字段,但在列表中顯示DisplayMember?

編輯:所有我想要做的就是填充.Text屬性與選擇的ValueMember而非DisplayMember

我也有填充具有DisplayMemberValueMember組有效的條目.Items

我的DisplayMember是一個標題以及數據,ValueMember是數據本身。

所以Items可能是:

(DisplayMember, ValueMember) 
"Foo - 1ab2" , "1ab2" 
"Bar - 3cd4" , "3cd4" 

我對文字的確認也可以手動驗證用戶輸入類似「5ef6」

我遇到的問題是,如果用戶選擇來自組合框的項目將使用DisplayMember屬性(例如:「Foo-1ab2」)填充文本字段,該屬性將驗證失敗。

我試圖手動設置.Text屬性與SelectedValue或每三個相關組合框事件無濟於事的SelectedItem.Value

我想選擇的時候,而不是.DisplayMember

編輯ComboBox的.Text與該項目的.ValueMember獲取填充:通過嘗試推斷從標題值我無法驗證。我將Text發送到要驗證的服務。

void FillMyCombo 
{ 
    KeyValuePair<string, string> listValue1 = new KeyValuePair<string, string>("Foo - 1ab2" , "1ab2") 
    KeyValuePair<string, string> listValue2 = new KeyValuePair<string, string>("Bar - 3cd4" , "3cd4") 
    myCombo.Items.Add(listValue1); 
    myCombo.Items.Add(listValue2); 

    myCombo.DisplayMember = "Key"; 
    myCombo.ValueMember = "Value"; 
} 

... 

void myCombo_TextUpdated 
{ 
    if(!myValidationService.Validate(myCombo.Text)) 
    { 
     do error stuff 
    } 
} 

用戶可以手動輸入類似「5ef6」,這將通過驗證。 但是,當他們從列表中選擇一個項目,而不是手動輸入它的.Text屬性,都會充滿標題而不是 ...所以它會包含「富 - 1ab2」,並且將無法通過驗證。

編輯:回覆發表的回覆:我無法更改驗證方法來從標題中「推斷」值。我無法控制該服務。所有我追求的是顯示值

編輯:假設用戶選擇「富 - 1ab2」從下拉列表中,我想在框中的文字說「1ab2」

編輯:我也嘗試在代碼中設置.Text屬性,但我似乎無法使其在任何ComboBox事件中工作。如果有人可以回答如何在選擇事件中編程設置.Text屬性(並使其提交!),他們也會回答這個問題。

+0

您正在爲選擇和編輯添加_caption_。由於似乎有一種關係,您可以修復驗證。 –

+0

@HenkHolterman我無法驗證標題,我只能驗證值。但ComboBox使用標題填充「Text」屬性,而不是值。這是我的問題。 – Matthew

+0

您的設置不允許創建或編輯值部分。爲什麼要驗證? –

回答

1

http://nickstips.wordpress.com/2010/11/19/c-datagridviewcomboboxcolumn-displaying-different-values-in-drop-down-list/怎麼樣 - 它們在下拉開啓/關閉時隨時改變ValueMemberDisplayMember

示例爲DatagridViewComboBox。 ComboBox也有這些事件,不是嗎?

給它一個嘗試,downvote如果它不能幫助:)=

** **更新

另一個好看的解決方案可能是ArgumentException when adding ComboBox column to DataGridView with same DataSource,有看不接受的答案。

+0

+1啊哈!從瀏覽文章這可能會工作。當我有機會在我的應用程序中測試代碼時,我會回來接受。 – Matthew

+0

不知道這是否是另一個好建議,但 - 請參閱更新。 – TheBlastOne

+1

您的鏈接解決了我的問題!我所做的是在'DropDown'和'DropDownClosed'事件中將'.DisplayMember'設置爲不同的屬性。 – Matthew

0

只需驗證ComboBox實例的.SelectedText屬性即可。 .Text總是包含用戶看到的,即顯示屬性的值:

void myCombo_TextUpdated 
{ 
    if(!myValidationService.Validate(myCombo.SelectedText)) 
    { 
     do error stuff 
    } 
} 

SelectedText獲取或設置在ComboBox的編輯部分選擇的文字,我想就算的SelectedIndex = -1 /的SelectedValue =空值。

+0

我無法驗證'.SelectedValue'。我不控制驗證服務。此外,當用戶手動輸入文本時,'.SelectedValue'將爲'null' – Matthew

+0

你說你不控制驗證服務,但是你有控制什麼將SENT傳遞給服務進行驗證嗎? – Stuart

+0

@Stuart是的,我可以在決定發送'.Text'或'.SelectedValue'之前簡單地檢查'.SelectedValue'是否爲'null',但這並不能解決顯示內容的問題。 – Matthew

相關問題