C#WPF自动完成Combobox与数据库

时间:2017-07-26 14:46:41

标签: c# wpf combobox

我想创建一个组合框,其功能类似于谷歌搜索数据库中的字段。我在VS 2015中添加了数据库作为数据源。我可以将数据集直接添加到我的组合框中吗?因为数据库没有显示在组合框的数据源属性中。我使用MariaDB和MySQL连接器6.9.8,因为在6.9.9中,似乎VS中存在数据集的错误。

在回答之前我不想在我的程序开始时使用方法,然后将List绑定到组合框...这不是问题。并不适用于此,因为条目可以每分钟更新。我想要一个组合框,在数据库中实时搜索条目。 因此,这个问题有一个很好的解决方案吗?我查找了一些可能的解决方案,但它们仅用于WinForms,或者在我的情况下,绑定到数据库的数据不起作用。

1 个答案:

答案 0 :(得分:0)

也许this会这样做。虽然它在技术上是一个TextBox,但它的行为与Goolge的搜索字段非常相似,并且它非常易于使用。

基本上你要做的就是在你的XAML中放一个AutoCompleteTextBox并将它绑定到一个建议提供者,这是一个包含GetSuggestions方法的类,它将从数据库中获取项目。

Foo.cs:

class Foo
{
    public string Label { get; set; }

    public Foo(string p_label)
    {
        Label = p_label;
    }
}

SuggestionProvider.cs:

class SuggestionProvider
{
    public IEnumerable GetSuggestions(string filter)
    {
        var returnList = new List<Foo>();

        foreach(/* Get items from the databse */)
        {
            returnList.Add(new Foo(/* Label from database */));
        }

        return returnList;
    }
}

XAML:

<!-- ... -->

<Window.Resources>
    <DataTemplate x:Key="ItemTemplate">
        <TextBlock Text="{Binding Path=Label}"/>
    </DataTemplate>
</Window.Resources>

<!-- ... -->

<WpfControls:AutoCompleteTextBox ItemTemplate="{StaticResource ResourceKey=ItemTemplate}"
                                 Provider="{Binding Path=SuggestionProvider}"
                                 DisplayMember="Label"/>                                  

每次在AutoCompleteTextBox的编辑器(文本字段)中键入内容时,都会执行SuggestionProvider的GetSuggestions方法,并返回一个对象列表。然后,这些对象将用于根据您定义的DataTemplate构建建议弹出窗口。 AutoCompleteTextBox的DisplayMember属性是对象的成员(属性),一旦选择了对象,就应该在编辑器中显示。

SuggestionProvider的过滤器是在编辑器中输入的文本(搜索字段)。

如果您希望在选择某些内容时(当您点击某个项目时)立即执行某项操作,还有一些工作要做,但如果您需要,我也可以帮助您。