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.