搜索组合框(Search Combo Box)就像Google搜索

9

我正在制作一个Windows表格,其中我有一个组合框,在其中我已经从SQL Server 2010中加载了一些“发票号码”。

我希望在用户输入组合框时显示发票号码。例如,如果用户输入“100”,则以“100”开头的发票号码应该显示在下拉列表中。

请帮忙,谢谢!


可能是重复问题: 请查看以下链接 https://dev59.com/2Wgt5IYBdhLWcg3w2A37 - Chandru velan
4个回答

15
    DataTable temp;
    DataTable bank;
    private void Form1_Load(object sender, EventArgs e)
    {
        comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
        comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;

        temp = DbRdRw.SqlDbRead("Select * from BankMaster", "BankMaster");

        DataView dtview = new DataView(temp);
        dtview.Sort = "BankName DESC";
        bank = dtview.ToTable();

        comboBox1.DataSource = bank;
        comboBox1.ValueMember = "BankName";
        comboBox1.DisplayMember = "BankName";
    }

1
我尝试了这段代码,它运行成功了... 感谢所有尝试回答我的问题的人... - Sam

8

在加载时使用数据库中的项目填充组合框,然后设置组合框属性:

AutoCompleteMode: 建议追加

AutoCompleteSource: 列表项

确保将下拉样式设置为DropDown,以便用户可以输入。 在接受输入之前,只需验证组合框中的输入文本是否存在于列表中。

希望这有所帮助。


根据您的回答,我尝试了一下,但它并不像%name%那样工作。然后我改成了按键输入,这样可以让我第一次写入,然后阻止匹配输入。我的代码片段:https://ideone.com/L3LqNk - Kabir Hossain

1

1
你需要做的是:
  • 每当用户在文本框中输入一个字符时,获取一个事件。
  • 有一个函数在此事件上运行,读取框中的内容(例如您的示例中的“100”)并向数据库发出查询,例如:

    SELECT InvoiceNumber from Invoices WHERE InvoiceNumber LIKE '100%'

  • 将匹配的结果显示回组合框供用户选择。

在 MSSQL 中,不是使用 % 而是使用 * 吗? - EaterOfCode
1
我至少在SQL Server 2010中成功使用了 - snappieT
我使用了您的方法,在组合框的Textchanged事件中编写了代码。以下是代码:string a = cbxBankName.Text + "%"; BankMasterTable = DbRdRw.SqlDbRead("Select * from BankMaster where BankName Like '" + a + "'", "BankMaster");//数据检索到一个数据表 //数据加载开始 cbxBankName.DataSource = BankMasterTable; cbxBankName.ValueMember = "BankName"; cbxBankName.DisplayMember = "BankName";但是它只显示一个值,而不是相似的值。 - Sam
继续上一个评论:如果我输入“B”,那么它应该显示所有以B开头的银行名称,例如“印度银行”和“马哈拉施特拉邦银行”,但它只显示“印度银行”。而且即使删除了输入,它也会一直显示。 - Sam
尝试直接在 SQL Server Management Studio 中针对数据库运行 SQL 查询,看看它返回哪些记录。你的代码看起来没问题,我不明白为什么只会显示一个结果。 - snappieT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接