开发者

Winforms, Combobox, Databinding... allow user to type in a value not found in the DataSource

Just like the title says.开发者_JS百科.. I have a Winforms application with a databound dropdown. I want the user to have the convenience to pick from a bunch of predefined values, but also the ability to type in his own value

If I just enable databinding and set dropdown type to anything but DropDownList, it allows me to enter anything I want, but does not persist it to the objects... Seems like a simple problem to solve... help?


I've added an event handler on ComboBox.Leave this code would add the newly typed in string in the combobox to the underlying list(countries) as well as refresh the combobox binding to it.

Limitations

  1. You'd have to handle the addition of new element based on the type of datasource you have.
  2. The List.Contains is case sensitive you might want to keep all the strings in one case. And convert the user entered value to that case before deciding to add it to the datasource.

Here you go, modify the comboBox1_Leave eventhandler according to your datatypes and datasource.

public partial class Form1 : Form
{
    private List<string> countries;
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        countries = new List<string>();
        countries.Add("Australia");
        countries.Add("Belgium");
        countries.Add("Canada");
        comboBox1.DataSource = countries;
    }

    private void comboBox1_Leave(object sender, EventArgs e)
    {
        ComboBox combo = (sender as ComboBox);
        CurrencyManager cm = (combo.BindingContext[combo.DataSource] as CurrencyManager);
        if (!cm.List.Contains(combo.Text))
        {
            cm.List.Add(combo.Text);
            cm.EndCurrentEdit();
            cm.Refresh();
            cm.Position = cm.Count - 1;
        }
    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜