I got "System.Collections.Generic.List" instead of data

12,347

The problem is in this code:

nameList = new List<string>() 
        {
           prodList.ToString()
        };

Since ToString() it is not overriden in List<T> it just returns a class name (basic implementation from System.Object). As result, your list contains single entry "System.Collection.Generic.List". To apply ToString() to elements of a list and create new list, replace that code with:

nameList = productList.Select(p => p.ToString()).ToList();
Share:
12,347
Love_Egypt
Author by

Love_Egypt

Updated on June 14, 2022

Comments

  • Love_Egypt
    Love_Egypt almost 2 years

    I tried to make an auto-complete TextBox like Google Search with C# in a WPF application, basically what I want to do is have an auto-complete TextBox which is bound to a SQL database table. the table has 2 fields(Barcode and Name),my code as below:

    In XAML :

    <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?