none
Autocompletebox con multiples columnas RRS feed

  • Pregunta

  • Hola, muy buenas a todos..

    Estoy implementando un autocomplete sobre un textbox y un listview. Los datos los tomo de una database:

    public partial class MainWindow : Window
        {
            List<string> listDepartamentos;
    
            public MainWindow()
            {
                InitializeComponent();
                listDepartamentos = new List<string>();
    
                OleDbConnection connection = new OleDbConnection();
                connection.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = prueba.accdb; Persist Security Info = False";
    
                connection.Open();
                DataSet ds = new DataSet();
                //Cadena SQL
                String cadenaSQL = "SELECT PB_Name, PB_Number FROM PhoneBook ORDER BY PB_Name";
    
                //Adaptador
                OleDbDataAdapter adaptador = new OleDbDataAdapter(cadenaSQL, connection);
    
                adaptador.Fill(ds);
                connection.Close();
    
                foreach (DataRow dataRow in ds.Tables[0].Rows)
                {
                    listDepartamentos.Add(dataRow[0].ToString());
                }
                lbSugerencias.ItemsSource = listDepartamentos;
    
    
                txtAutoCompletado.TextChanged += new TextChangedEventHandler(txtAutoCompletado_TextChanged);
                txtAutoCompletado.PreviewKeyDown += new KeyEventHandler(txtAutoCompletado_PreviewKeyDown);
                lbSugerencias.SelectionChanged += new SelectionChangedEventHandler(lbSugerencias_SelectionChanged);
            }


    y en el txtAutoCompletado_TextChanged:

    void txtAutoCompletado_TextChanged(object sender, TextChangedEventArgs e)
            {
                //Primera parte filtrado
                string _StringBuscar = txtAutoCompletado.Text;
                List<string> autoList = new List<string>();
                autoList.Clear();
    
                foreach (string item in listDepartamentos)
                {
                    if (!string.IsNullOrEmpty(txtAutoCompletado.Text))
                    {
                        if(item.ToUpper().Contains(_StringBuscar.ToUpper()))
                        {
                            autoList.Add(item);
                        }
                    }
                }
    
                //Segunda parte ocultar el listbox dependiendo de si esta vacio o no
                if (autoList.Count > 0)
                {
                    lbSugerencias.ItemsSource = autoList;
                    lbSugerencias.Visibility = Visibility.Visible;
                }
                else if (txtAutoCompletado.Text.Equals(""))
                {
                    lbSugerencias.Visibility = Visibility.Collapsed;
                    lbSugerencias.ItemsSource = null;
                }
                else
                {
                    lbSugerencias.Visibility = Visibility.Collapsed;
                    lbSugerencias.ItemsSource = null;
                }
            }

    Hasta aquí me funciona bien. Tecleo cualquier letra y me aparece en el listview cualquier nombre de la database (PB_Name) que contenga lo tecleado.

    Pero el problema me surge cuando quiero que el listview tenga 2 columnas. Quiero poder mostrar en una columna del listview el PB_Name y en la otra el PB_Number.

    Como puedo hacerlo con varias columnas?

    Muchas gracias

    sábado, 12 de octubre de 2013 18:00