2016-12-01 82 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 }))