2010-11-02 55 views
6

Tôi đang có một điều khiển ListView không có cột.Cách thêm tiêu đề Cột vào một ListView trong C#

một danh sách

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

tôi cần phải tạo ra các cột cho mỗi mục MyList trong ListView cùng với nhau cột Số Sê-ri.

Ví dụ nếu MyList chứa "A", "B" ,"C"

thì xem danh sách sẽ như thế nào

alt text

tôi biết rằng chúng tôi có thể làm điều này bằng for hoặc foreach vòng lặp như

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

nhưng có cách nào để làm điều này bằng cách sử dụng LINQ hoặc LAMBDA Expression?

Trả lời

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

tôi cần phải thêm cột "S.No" với điều này. –

+3

Bạn không phải thêm S.No với LINQ. LINQ chỉ là một phím tắt để viết các vòng lặp mà làm cho mã có thể đọc được, không có gì hơn. Nếu bạn có, hãy thêm S.No làm mục đầu tiên trong danh sách bằng cách sử dụng InsertAt của danh sách. – Aliostad

0

Chỉ cần để làm cho nó rõ ràng hơn một chút những gì Aliostad viết và những gì các bình luận bên dưới câu trả lời này có nghĩa là:

Vì vậy, bạn đang có mã này:

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

Như bạn đã đề cập, bạn có thể viết nó với foreach. Điều này sẽ trông giống như sau:

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

Trong ví dụ thứ hai, nó cũng lặp lại trong danh sách. Tất cả nó làm nó ẩn biến chỉ mục cục bộ i.

Với ví dụ thứ ba này, bạn đang không đi để che giấu cũng iterating này trong một chức năng mà cần một hành động gì để làm với mỗi mục trong danh sách:

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

Dưới mui xe nó vẫn lặp trên tất cả các yếu tố và thực hiện một số chức năng trên từng phần tử. Bạn không tự viết vòng lặp, nhưng điều đó không có nghĩa là nó nhanh hơn hoặc tốt hơn cách tiếp cận của bạn. Đó chỉ là một cách khác (ngắn hơn) để nói những gì bạn muốn đạt được.

4

Dưới đây là 4 lựa chọn
có ít nhất thêm 10 cách để làm điều này,

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); 

bạn đã xem xét các tùy chọn KISS?

Các vấn đề liên quan