在输入文本时列出组合框中的匹配项?

时间:2014-06-08 16:56:03

标签: c# .net winforms combobox mvp

我在表单中有一个ComboBox,当用户在框中键入一些文本时,如果数据库中存在匹配的文本类型的匹配项,则应列在ComboBox中。这样,如果输入的项目已经在数据库中,则可以通知用户。我正在尝试如下实现这一点。

combo中输入文字时,它会触发一个事件。收听该事件后,Presenter将从数据库中获取匹配的用户列表,然后列表将设置为DataSource的{​​{1}},如下所示...

但是为什么它没有显示在组合中?请让我知道此代码中的问题!

表格

ComboBox

演示

public partial class frmUser : Form
{
    // two seperate get and set properties are used to same combo box as a list will be set as the datasource.

    public string UserName 
    {
        get{return cmbUserName.Text;}
    }

    public IEnumerable<User> UserList
    {
        set { cmbUserName.DataSource = value; }
    }
    private void cmbUserName_TextChanged(object sender, EventArgs e)
    {
        OnChangeText(sender, e);
    }
} 

的DataService

class UserPresenter
{       
    private void WireUpEvents()
    {
        _View.OnChangeText += new EventHandler(_View_OnChangeText);
    }

    private void _View_OnChangeText(object sender, EventArgs e)
    {
        ShowMatchingUsers();
    }

    private void ShowMatchingUsers()
    {
        var userList = _DataService.GetUsers(_View.UserName ); //edit
        _Veiew.UserList = userList; //edit
    }
}

3 个答案:

答案 0 :(得分:1)

我无法告诉您完全如何更改代码,因为我缺少一些细节,例如一些事件和类以及类和对象的可能嵌套状态。

但是,正如我所指出的那样,错误是IEnumerable<User>带来的GetUsers被遗弃的事实。

您写道应该通过DataSource用作ComboBox的{​​{1}},但实际上您隐藏这个属性通过声明一个新的

Property UserList

本地List<User> UserList = new List<User>(); 。这样可以,虽然有点令人困惑; (我建议你称它为GetUsers;)之类的东西,但是你仍然需要将真实的newUserlist设置为返回的结果集!

当我这样补丁时(缺少关于你实际代码的重要信息)

UserList

Combobox中的虚拟值显示正常。

您不应该使用我的代码,而是与您一起设置!改变

private void cmbUserName_TextChanged(object sender, EventArgs e)
{
  UserList = _DataService.GetUsers("_View.UserName");

   ///OnChangeText(sender, e); re-instate your own wiring!
}

_DataService.GetUsers(_View.UserName );

似乎是直接解决方案,但您可能需要注意一种连接内部和外部类变量的方法。

答案 1 :(得分:1)

使用visual studio,如下设置combobox属性  combobox autocompletemode = SuggestAppend &amp; autocompletesource = <强> listItems中

答案 2 :(得分:0)

我应该将参数的值设为userID+"%"而不是userID。关于用户列表,我想我必须有一个循环添加项目到列表的某个地方。