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.