2016-12-01 78 views
0

我怎样才能选择关于选定项目的所有信息,不仅是第一列,而是全部?Linq - 从ListView中选择项目

第一列我只需要:

ListView.Items.AddRange(ListData 
    .Where(i => string.IsNullOrEmpty(searchBox.Text) || i.ID.StartsWith(searchBox.Text)) 
    .Select(c => new ListViewItem(c.ID)) 
    .ToArray()); 

比方说,明年栏目有:NameLastName

我知道,我必须使用Linq段看起来像:

(...).Select(c => { }) 

在此先感谢!

+0

删除从现场开始一段时间的LINQ,然后回答自己“我应该怎么做才能将ListViewItem添加到我的ListView中,同时填充Column name和LastName?” –

+0

那么,第一列是一个项目,下一列是从这个项目的子项目。 – yerpy

回答

1

您可以使用一个ListViewItem构造函数接受数组串(其中第一后元素是子项)

假设你的类有属性LastNameName

ListView.Items.AddRange(ListData.Where(i =>  
      string.IsNullOrEmpty(searchBox.Text) 
      || i.ID.StartsWith(searchBox.Text)) 
      .Select(c => new ListViewItem // this part 
       (
       new string[]{c.ID, c.Name, c.LastName} 
       )).ToArray()); 

如果单一的ListViewItem的创建变得更加复杂,可以考虑使用一个函数,:

ListView.Items.AddRange(ListData.Where(i =>  
      string.IsNullOrEmpty(searchBox.Text) 
      || i.ID.StartsWith(searchBox.Text)) 
      .Select(c => CreateListViewItemFromElement(c)).ToArray()); 

private ListViewItem CreateListViewItemFromElement(MyClass element) 
{ 
// handle the element to create a "complete" ListViewItem with subitems 
    ListViewItem item = new ListViewItem(c.ID); 
    .... 
    return item; 
} 

(实际上,我会用后者在任何情况下,它更可读我)

+0

谢谢!我会在将来做到这一点! – yerpy

1

只是初始化您在.Select()方法行这需要所有属性:

ListView.Items.AddRange(ListData.Where(i =>  
      string.IsNullOrEmpty(searchBox.Text) 
      || i.ID.StartsWith(searchBox.Text)) 
      .Select(c => new ListViewItem // this part 
       { 
        Name = c.ID.ToString(), 
        Text = c.Name + " " + c.LastName 
       }).ToArray()); 

莫比要填充不同的特性,所以填写freee只要你想改变这一部分。

+0

但我不需要它们作为字符串,但每个值都在正确的列中。 – yerpy

1

那么,ListViewItem类有22 constructor overloads,所以你可以使用其中的任何支持传入string[] items,例如this one(!):

.Select(c => new ListViewItem(new string[] { c.ID, c.Name, c.LastName }))