如何在组合框中的列表视图中显示linq查询结果 [英] how do I Display linq query result in a listview from a combobox
问题描述
我得到的最接近的答案是这个问题。
https://social.msdn.microsoft.com/Forums/en-US/00336aa4-0895-4c4d-b1e5-380bbdffd961/display-linq-query- result-in-listview?forum = wpf [ ^ ]
到目前为止只有Linq查询显示或没有显示。我尝试了很多不同的编码,但似乎无法解决这个问题。
The closest answer I got was this Question.
https://social.msdn.microsoft.com/Forums/en-US/00336aa4-0895-4c4d-b1e5-380bbdffd961/display-linq-query-result-in-listview?forum=wpf[^]
so far either only Linq queries are getting displayed or nothing. I have tried a lot of different coding but can't seem to figure this out.
public struct PIDData
{
public long PIdentity { get; set; }
public string PName { get; set; }
public string PPrice { get; set; }
public string PSerial { get; set; }
public string PDescription { get; set; }
public string PType { get; set; }
public string PPosition { get; set; }
public Binary PImage { get; set; }
}
//Binding combobox
using (DataClassesDataContext DC = new DataClassesDataContext())
{
cbItem.Items.Clear();
foreach (tblProduct R in DC.tblProducts)
cbItem.Items.Add(R);
cbItem.DisplayMemberPath = "ProductName";
}
//Combobox Selection changed
List<string> items = new List<string> { cbItem.SelectedItem.ToString() };
IEnumerable<string> query = items.Where(item => item.ToString() != null);
lvDataBinding.Items.Add(items);
txt1.Text = items.ToString();
//Xaml
<ListView Margin="338,20,1,16" Name="lvDataBinding">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding PName}">
<GridViewColumnHeader Tag="Product Name" Width="100">Product Name</GridViewColumnHeader>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<ComboBox x:Name="cbItem" HorizontalAlignment="Left" Margin="13,315,0,0" VerticalAlignment="Top" Width="321" SelectionChanged="cbItem_SelectionChanged"/>
推荐答案
这将帮助你解决我的朋友:
This will help you out my friend:
private void cmbSelectProduct_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
PIDData PID = (PIDData)cmbSelectProduct.SelectedItem;
List<string> items = new List<string> { PID.Name };
items.Where(item => item.ToString() != null).ToList().ForEach(i =>
{
lvAddProducts.Items.Add(i);
});
}
以下是问题:
Here is the issue:
lvDataBinding.Items.Add(items)
lvDataBinding.Items.Add(items)
Items.Add方法将创建一个新的单项并显示GetString()。
您需要将Items.AddRange用于项目组,但不能所有收藏都支持这个。
一个快速的快捷方式是将你的查询转换成一个列表并插入ForEach():
The Items.Add method will create a new single item and will display the GetString().
You need to use Items.AddRange for groups of items, but not all collections support this.
A quick shortcut is to cast your query as a list and cann ForEach():
...
//Combobox Selection changed
List<string> items = new List<string> { cbItem.SelectedItem.ToString() };
items.Where(item => item.ToString() != null).ToList().ForEach(i=>
{
lvDataBinding.Items.Add(i);
}
//What is this supposed to do? collection.ToString() will, by default, return GetType().ToString(). That'll look like "System.Collections.List<string>" or similar
txt1.Text = items.ToString();
//You will need to get the string of a single item, or join a range of items strings. There are many ways to do this
string.Join(", ",items); //is one way of comma separating the values
...
这篇关于如何在组合框中的列表视图中显示linq查询结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!