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