得到“System.Collections.Generic.List”而不是数据 [英] got “System.Collections.Generic.List” instead of data

查看:77
本文介绍了得到“System.Collections.Generic.List”而不是数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试在WPF应用程序中使用C#创建自动完成文本框,基本上我想要做的是有一个自动完成文本框,它绑定到sql数据库表。该表有2个字段(条形码和名称),我的代码如下:



在XMAL中:



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"
           removed="LightYellow" Grid.Row="1" Visibility="Collapsed"
                HorizontalAlignment="Right" VerticalAlignment="Top" Width="325" Margin="0,0,10,0"/>
   </Grid>



Code Behind:


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; }
    }

}



当我运行这个时,我得到了System.Collections.Generic.List结果而不是数据。



有人可以帮助我吗?告诉我有什么问题?



谢谢。


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.

推荐答案

我看到这行代码:

I see this line of code:
prodList.ToString();



List.ToString(); 总是返回System.Collections.Generic.List

我不能告诉你该怎么做,因为我不知道你想得到哪个结果而不是System.Collections.Generic.List







要显示产品名称,请更改以下声明:


List.ToString(); returns always "System.Collections.Generic.List".
I can''t tell you what to do, because I don''t know which result you want to get instead of "System.Collections.Generic.List".



To show the product name, change this statement:

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



进入:


Into this:

nameList = new List<string();
foreach (Product pr in prodList)
{
    nameList.Add(pr.ProductName);
}



[/编辑]



希望这会有所帮助。


[/EDIT]

Hope this helps.


我对你的代码做了一些调整。



从此到

I made little adjustment to your code.

From this to
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;





这个。



This.

nameList = new List<string>();
for (int i = 0; i < dsProds.Tables[0].Rows.Count; i++)
{
    nameList.Add(dsProds.Tables[0].Rows[i]["ProductName"].ToString())
}
dsProds = null;
return nameList;
</string>


一个提示是将ItemTemplate和ContentTemplate包含到ListView中并在那里操作可显示的数据。
A tip is to include ItemTemplate and ContentTemplate to your ListView and manipulate displayable data there.


这篇关于得到“System.Collections.Generic.List”而不是数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆