如何在组合框中的列表视图中显示linq查询结果 [英] how do I Display linq query result in a listview from a combobox

查看:66
本文介绍了如何在组合框中的列表视图中显示linq查询结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得到的最接近的答案是这个问题。



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:

Quote:

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屋!

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