得到“System.Collections.Generic.List”而不是数据 [英] got “System.Collections.Generic.List” instead of data
问题描述
我尝试在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屋!