![](/img/trans.png)
[英]C# - Databound Combobox always returns null value for .selectedItem or .selectedValue
[英]Combobox returns null when value is typed
抱歉,它有一些明显的解决方案,但我试图解决数小时,但找不到解决方案。
我在WindowsFormsApplication
使用了几个ComboBox
来将id
与name
s关联。 问题在于,当用户从组合框列表中选择一个项目时,它可以正常工作,但是当他键入一个项目时,组合框的SelectedValue
属性为null
。
为了模拟问题,我创建了一个带有一个按钮和一个组合框的from。 在我的实际应用程序中,我用来自sqlserver数据库中表的数据填充组合框,但是为了简单起见,在这里用list
填充它:
public Form1()
{
InitializeComponent();
List<KeyValuePair<short,short>> l = new List<KeyValuePair<short,short>>();
l.Add(new KeyValuePair<short,short>(1,10));
l.Add(new KeyValuePair<short,short>(2,20));
l.Add(new KeyValuePair<short,short>(3,30));
this.comboBox1.DataSource = l;
this.comboBox1.DisplayMember = "Value";
this.comboBox1.ValueMember = "Key";
}
private void button1_Click(object sender, EventArgs e)
{
if (this.comboBox1.SelectedValue == null)
MessageBox.Show("NULL");
else
MessageBox.Show(this.comboBox1.SelectedValue.ToString());
}
例如,当用户从列表中选择第二个项目(20)并单击按钮时,消息框将按预期显示2 ,但是如果他在组合框中键入数字20 ,则SelectedValue
为null
。
可以通过更改组合框的样式来解决此问题:
this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
但是它阻止用户键入组合框,因此我被迫使用默认的ComboBoxStyle.DropDown
。
那是因为组合框没有选择您键入的项目。 添加此选项
comboBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
然后它将在能够找到它时选择该项目。
默认情况下,它设置为AutoCompleteMode.None
。
(我认为)这主要是为建议而设计的,但是可以在这里解决您的问题。 另外,如果您想显示建议:
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
默认情况下,它设置为AutoCompleteSource.None
。
您拥有的一个选项是在comboBox1.TextChange事件上使用EventHandler,这将使您可以亲自处理如何将文本转换为不同的选项。
可以将其添加到设计器中(类似于按钮)。
this.comboBox1.TextChanged += new System.EventHandler(this.UpdateValue);
然后根据想要读取结果的方式并查看是否有匹配项,可以创建一个转换器,使用另一个键/值,或者可以像我向您展示的那样进行无聊的旧tryparse。 您将需要该列表作为可参考的属性,以查看是否找到了正确的结果。
private void UpdateValue(object sender, EventArgs e)
{
short result;
if (short.TryParse(comboBox1.Text, out result))
{
var matches = from val in l where val.Value == result select val.Key;
{
foreach (short m in matches)
this.comboBox1.SelectedValue = m;
}
}
}
祝好运! 让我知道您是否需要事件处理程序的更多示例。 不要忘记投票。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.