Employers - Post Free Jobs
Forum guidelines
  • Home
  • »
  • WPF
  • »
  • I got “System.Collections.Generic.List” instead of data
AuthorQuestion
I got “System.Collections.Generic.List” instead of data
Posted on: 13 Dec 2012

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.


Doudy
AuthorReply
Re: I got “System.Collections.Generic.List” instead of data
Posted on: 14 Dec 2012  
Thats because the below logic is incorrect.

 nameList = new List<string>()

            {

               prodList.ToString()

            };


Here you are adding an object into name list and only the first.


Instead of the above code, write,

 nameList = new List<string>();

nameList=prodList.Select(m=>m.ProductName).ToList();


So now the list will have all productnames. 

This will work. 


I also found out another issue that if you type any character apart from first character as small case, then autosuggest is not working. I have found out solution for that also

Instead of the below line


 if (item.StartsWith(typedString))


try this

 if (item.ToUpper().StartsWith(typedString))


Its working fine for me now.


Please let me know if it didnt work




Thanks & Regards,
Santhosh

Please mark this answer as accepted answer if it resolves your problem.
Re: I got “System.Collections.Generic.List” instead of data
Posted on: 15 Dec 2012  
I tried your idea, but still have no data at listbox 
Doudy
Re: I got “System.Collections.Generic.List” instead of data
Posted on: 16 Dec 2012  
Try with the attached xaml.cs file.. 

I dont have sql server, so i added data into list in code behind and its working for me

Thanks & Regards,
Santhosh

Please mark this answer as accepted answer if it resolves your problem.

SPONSORED BY

Offshore Software and Database Development
MCN is your source for developing solutions involving websites, mobile apps, cloud-computing, databases, BI, back-end services and processes and client-server applications.