2010-11-02 37 views
6

我有一個沒有列的ListView控件。如何將列標題添加到C#中的ListView中#

的列表

List<String> MyList=new List<string>(); 

我需要在序列號的ListView隨着彼此列創建列每個列表MyList項目。

例如,如果MyList包含"A", "B" ,"C"

則列表視圖會像

alt text

我知道,我們可以使用forforeach圈狀

listView1.Columns.Add("S.No") 
for(int i=0;i<MyList.Count;i++) 
    { 
     listView1.Columns.Add(MyList[i]) 
    } 

做到這一點但有沒有辦法使用來做到這一點或LAMBDA Expression

回答

4
MyList.ForEach(name => listView1.Columns.Add(name)); 
+0

我需要添加「S.No」列。 – 2010-11-02 12:03:38

+3

您不必添加S.No與Linq。 Linq只是編寫使代碼可讀的循環的捷徑,僅此而已。如果必須,請使用列表的InsertAt將S.No作爲列表中的第一項添加。 – Aliostad 2010-11-02 12:05:13

0

只是爲了更清楚一點什麼Aliostad寫的,什麼這個答案下面的評論中表示:

所以,你現在有這樣的代碼:

listView1.Columns.Add("S.No") 
for(int i=0;i<MyList.Count;i++) 
{ 
    listView1.Columns.Add(MyList[i]) 
} 

正如你已經提到的,你可以寫它也與foreach。這看起來像這樣:

listView1.Columns.Add("S.No") 
foreach(var item in MyList) 
{ 
    listView1.Columns.Add(item) 
} 

在第二個示例中它也遍歷列表。它所做的就是隱藏本地索引變量i

由於你沒有打算也隱藏這個迭代中,需要一個動作做什麼用列表中的每個項目的功能這第三個例子:

listView1.Columns.Add("S.No") 
MyList.ForEach(name => listView1.Columns.Add(name)); 

引擎蓋下它仍然遍歷所有元素並在每個元素上執行一些功能。你只是不要自己編寫循環,但這並不意味着它比你的方法更快或更好。這是另一種(較短)的方式來告訴你想要達到的目標。

4

這裏有4個選項
至少有另外10種方法可以做到這一點,

var myList = new List<string>() { "A", "B", "C" }; 

// 1: Modify original list and use List<>.ForEach() 
myList.Insert(0, "S. No"); 
myList.ForEach(x => lisView.Columns.Add(x)); 

// 2: Add first column and use List<>.ForEach() 
listView.Columns.Add("S. No"); 
myList.ForEach(x => listView.Columns.Add(x)); 

// 3: Don't modify original list 
(new[] { "S. No" }).Concat(myList).ToList() 
    .ForEach(x => listView.Columns.Add(x)); 

// 4: Create ColumnHeader[] with Linq and use ListView.Columns.AddRange() 
var columns = (new[] { "S. No"}).Concat(myList) 
    .Select(x => new ColumnHeader { Text = x }).ToArray(); 
listView.Columns.AddRange(columns); 

你有沒有考慮在KISS選項?

相關問題