可编辑的组合框无法正常工作

时间:2018-08-24 17:33:42

标签: c# .net wpf combobox

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

下面列出了一些问题。

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

2。)第二个问题是我无法在组合框中键入完整的单词,它使我只能键入第一个字母。它显示了与之匹配的项目的列表。

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 comboBox3_PreviewTextInput(object sender, TextCompositionEventArgs e)
    {
        ComboBox comboBox = sender as ComboBox;
        comboBox.IsDropDownOpen = true;


    }

    private void ComboBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        if (((ComboBox)sender).Text != "")
        {
            DataSet 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.RowFilter = "p_name like '" + ((ComboBox)sender).Text + "'+'%'";
            //comboBox3.ItemsSource = ds.Tables[0].DefaultView.RowFilter = "p_name like 'B%'";
            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();
        }
    }

请帮助

3 个答案:

答案 0 :(得分:1)

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

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 + "%'";
}

答案 1 :(得分:0)

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;  
}

答案 2 :(得分:0)

我已经通过在XAML方面进行简单的更改解决了我的问题。现在我问题中的代码可以正常工作,并且WPF Simple组合框已转换为Filtered Combobox。

我已经基本设置

      IsTextSearchEnabled="True"

      IsTextSearchEnabled="False" 

这解决了我自1个月左右以来一直面临的问题。

<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"/>

感谢所有试图帮助我的人。