2011-10-12 96 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

相关问题