I tried to make a autoComplete textbox like google Search with C# in a WPF application, basically what I want to do is have a autocomplete textbox which is bound to a sql database table. the table has 2 fields(Barcode and Name),my code as below:
In XMAL :
---------
<Grid> <Grid.RowDefinitions> <RowDefinition Height="37*" /> <RowDefinition Height="88*" /> </Grid.RowDefinitions> <TextBlock Text="Type Your Search :" HorizontalAlignment="Left" VerticalAlignment="Bottom" Width="112" Height="15.96" Margin="31,0,0,4" /> <TextBox HorizontalAlignment="Right" VerticalAlignment="Bottom" Height="25" Width="325" Margin="0,0,10,0" x:Name="txtCAuto" TextWrapping="NoWrap" /> <ListBox x:Name="lbSuggestion" SelectionChanged="lbSuggestion_SelectionChanged" Background="LightYellow" Grid.Row="1" Visibility="Collapsed" HorizontalAlignment="Right" VerticalAlignment="Top" Width="325" Margin="0,0,10,0"/> </Grid> Code Behind: ------------ List<string> nameList; List<Product> prodList; public List<string> SelProd4Sale(string str ) { string constr = "Data Source=.;Initial Catalog=AgamistaStore;User ID=emad2012;Password=emad_2012"; SqlConnection SqlCon = new SqlConnection(constr); SqlCommand SqlCmdProds = new SqlCommand(); SqlCmdProds.Connection = SqlCon; SqlCmdProds.CommandType = CommandType.Text; SqlCmdProds.CommandText = "SELECT dbo.ProductsTbl.ProductID,ProductsTbl.ProductBarcode," + "dbo.ProductsTbl.ProductName, dbo.ProductsTbl.SalePrice FROM dbo.ProductsTbl"; SqlCon.Open(); SqlDataAdapter dapProds = new SqlDataAdapter(); dapProds.SelectCommand = SqlCmdProds; DataSet dsProds = new DataSet(); dapProds.Fill(dsProds); SqlCon.Close(); prodList = new List<Product>(); for (int i = 0; i < dsProds.Tables[0].Rows.Count; i++) { prodList.Add(new Product (dsProds.Tables[0].Rows[i]["ProductBarcode"].ToString(), dsProds.Tables[0].Rows[i]["ProductName"].ToString()); } dsProds = null; nameList = new List<string>() { prodList.ToString() }; return nameList; } public Window2() { InitializeComponent(); SelProd4Sale(txtCAuto.Text); txtCAuto.TextChanged += new TextChangedEventHandler(txtAuto_TextChanged); } #region TextBox-TextChanged-txtAuto private void txtAuto_TextChanged(object sender, TextChangedEventArgs e) { string typedString = txtCAuto.Text.ToUpper(); List<string> autoList = new List<string>(); autoList.Clear(); foreach (string item in nameList) { if (!string.IsNullOrEmpty(txtCAuto.Text)) { if (item.StartsWith(typedString)) { autoList.Add(item); } } } if (autoList.Count > 0) { lbSuggestion.ItemsSource = autoList; lbSuggestion.Visibility = Visibility.Visible; } else if (txtCAuto.Text.Equals("")) { lbSuggestion.Visibility = Visibility.Collapsed; lbSuggestion.ItemsSource = null; } else { lbSuggestion.Visibility = Visibility.Collapsed; lbSuggestion.ItemsSource = null; } } #endregion #region ListBox-SelectionChanged-lbSuggestion private void lbSuggestion_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (lbSuggestion.ItemsSource != null) { lbSuggestion.Visibility = Visibility.Collapsed; txtCAuto.TextChanged -= new TextChangedEventHandler(txtAuto_TextChanged); if (lbSuggestion.SelectedIndex != -1) { txtCAuto.Text = lbSuggestion.SelectedItem.ToString(); } txtCAuto.TextChanged += new TextChangedEventHandler(txtAuto_TextChanged); } } #endregion } class Product { private string _ProductBarcode = ""; private string _ProductName = ""; public Product(string prodName,string prodBarcode) { this._ProductBarcode = prodBarcode; this._ProductName = prodName; } public string ProductBarcode { get { return _ProductBarcode; } set { _ProductBarcode = value; } } public string ProductName { get { return _ProductName; } set { _ProductName = value; } } }
When I run this I got "System.Collections.Generic.List" as result instead of data.
Can somebody help me please & tell me what 's wrong?
Thanks.