C# 可编辑组合框工作不正常

C# 可编辑组合框工作不正常,c#,.net,wpf,combobox,C#,.net,Wpf,Combobox,我制作了一个可编辑的组合框,用于过滤项目 下面列出了一些问题 1.)第一个问题是它只在第一次起作用。例如,如果我第一次键入B,它将显示以B开头的项目列表。然后,如果我按Backspace并再次输入B,则它将仅显示以B开头的列表中的第一个项目。这是现在的实际问题。下面是我修改代码的链接 2.)第二个问题是我无法在Combobox中键入完整的单词,它只允许我键入第一个字母。它向我显示了与之匹配的项目列表 XAML端代码 <ComboBox Height="23" HorizontalAlign

我制作了一个可编辑的组合框,用于过滤项目

下面列出了一些问题

1.)第一个问题是它只在第一次起作用。例如,如果我第一次键入B,它将显示以B开头的项目列表。然后,如果我按Backspace并再次输入B,则它将仅显示以B开头的列表中的第一个项目。这是现在的实际问题。下面是我修改代码的链接

2.)第二个问题是我无法在Combobox中键入完整的单词,它只允许我键入第一个字母。它向我显示了与之匹配的项目列表

XAML端代码

<ComboBox Height="23" HorizontalAlignment="Left" Margin="292,104,0,0" Name="comboBox3" VerticalAlignment="Top" Width="149" IsEditable="True" IsTextSearchEnabled="True" PreviewTextInput="comboBox3_PreviewTextInput" TextBoxBase.TextChanged="ComboBox_TextChanged"/>

请帮助

如果我是你,出于性能原因,我会使用以下方法:

private void ComboBox_TextChanged(object sender, TextChangedEventArgs e)
{
    var searchtext = comboBox3.Text;
    comboBox3.ItemsSource = null;
    SqlDataAdapter da = new SqlDataAdapter("Select p_id_pk,p_name FROM products where p_name like '" + comboBox3.Text + "'+'%'", con);
    DataSet ds = new DataSet();
    da.Fill(ds, "products");
    comboBox3.ItemsSource = ds.Tables[0].DefaultView;
    comboBox3.DisplayMemberPath = ds.Tables[0].Columns["p_name"].ToString();
    comboBox3.SelectedValuePath = ds.Tables[0].Columns["p_id_pk"].ToString();
    comboBox3.Text = searchtext;  
}
private DataSet ds = null; // initialize dataset with null value
private void ComboBox_TextChanged(object sender, TextChangedEventArgs e)
{
    if (ds == null) // initialize dataset on demand with all possible values from database
    {
        ds = new DataSet();
        SqlDataAdapter da = new SqlDataAdapter("Select p_id_pk,p_name FROM products", con);
        da.Fill(ds, "products");

        comboBox3.ItemsSource = ds.Tables[0].DefaultView;
        comboBox3.DisplayMemberPath = ds.Tables[0].Columns["p_name"].ToString();
        comboBox3.SelectedValuePath = ds.Tables[0].Columns["p_id_pk"].ToString();
        return;
    }

    // filter view based on text input
    ds.Tables[0].DefaultView.RowFilter = "p_name like '"+ comboBox3.Text + "%'";
}

我在XAML端做了一个简单的更改,解决了我的问题。现在,我问题中的代码正常工作,WPF Simple combobox被转换为过滤combobox

我基本上已经准备好了

      IsTextSearchEnabled="True"

这解决了我一个多月以来面临的问题

<ComboBox Height="23" HorizontalAlignment="Left" Margin="292,104,0,0" Name="comboBox3" VerticalAlignment="Top" Width="149" IsEditable="True" IsTextSearchEnabled="False" PreviewTextInput="comboBox3_PreviewTextInput" TextBoxBase.TextChanged="ComboBox_TextChanged"/>


感谢所有试图帮助我的人

这不是我问题的答案。您的解决方案给出了错误“值不能为空。参数名称:dataSet”@yaseenenterprises您尝试过吗?您需要在构造函数中初始化ds。由于自调用循环,您的原始代码无法工作。让我们来看看。
      IsTextSearchEnabled="False" 
<ComboBox Height="23" HorizontalAlignment="Left" Margin="292,104,0,0" Name="comboBox3" VerticalAlignment="Top" Width="149" IsEditable="True" IsTextSearchEnabled="False" PreviewTextInput="comboBox3_PreviewTextInput" TextBoxBase.TextChanged="ComboBox_TextChanged"/>