2009-04-08 64 views
24

Tạo một mục (Theo khóa) rất dễ dàng, nhưng cách thêm subitems (Value)?C#: Cách thêm subitems vào ListView

listView1.Columns.Add("Key"); 
listView1.Columns.Add("Value"); 
listView1.Items.Add("sdasdasdasd"); 
//How to add "asdasdasd" under value? 
+0

thử này. listView1.Items.Add (new ListViewItem (new [] {"1", "2", "3", "4", "5"})); –

Trả lời

24

như thế này:

ListViewItem lvi = new ListViewItem(); 
lvi.SubItems.Add("SubItem"); 
listView1.Items.Add(lvi); 
2
ListViewItem item = new ListViewItem(); 
item.Text = "fdfdfd"; 
item.SubItems.Add ("melp"); 
listView.Items.Add(item); 
+0

ListItem là gì, trình biên dịch không nhận ra nó. –

+0

Tôi chắc chắn anh ấy có nghĩa là ListViewItem. –

+0

Listviewitem offcourse, xin lỗi vì lỗi đánh máy, nhưng với một chút nỗ lực tôi chắc chắn bạn nên đã phát hiện ra mình rằng nó là ListViewItem thay vì ListItem. Kiểm tra MSDN và quá tải Thêm phương pháp của các tài sản Items của listview ... –

28

Bạn Whack subitems vào một mảng và thêm mảng như một mục danh sách.

Thứ tự mà bạn thêm giá trị cho mảng dictates cột chúng xuất hiện dưới để nghĩ về đề mục phụ của bạn là [0], [1], [2], vv

Dưới đây là một mẫu mã:

//In this example an array of three items is added to a three column listview 
string[] saLvwItem = new string[3]; 

foreach (string wholeitem in listofitems) 
{ 
    saLvwItem[0] = "Status Message"; 
    saLvwItem[1] = wholeitem; 
    saLvwItem[2] = DateTime.Now.ToString("dddd dd/MM/yyyy - HH:mm:ss"); 

    ListViewItem lvi = new ListViewItem(saLvwItem); 

    lvwMyListView.Items.Add(lvi); 
} 
+0

Er ... Tôi đã sử dụng kỹ thuật này khoảng bốn lần trong hai tuần qua. Tại sao các downvotes? –

+0

+1 để cung cấp giải pháp thay thế hoàn toàn hợp lệ cho các câu trả lời khác. Tại sao bạn nhận được một downvote tôi không biết. –

+3

Một cách thay thế dễ dàng hơn là làm như vậy: 'listView.Items.Add (new ListViewItem (chuỗi mới [] {" Col1 "," SubItem2 "," SubItem3 "," Và cứ thế "})); ' – c00000fd

2

Tạo mục listview

ListViewItem item1 = new ListViewItem("sdasdasdasd", 0) 
item1.SubItems.Add("asdasdasd") 
+0

tại sao này có được giảm giá không? Sao chép dán nó từ msdn – RvdK

15

Giả sử bạn có một Bộ sưu tập Danh sách chứa nhiều mục hiển thị trong một ListView, lấy ví dụ sau đó lặp qua danh sách Bộ sưu tập:

foreach (Inspection inspection in anInspector.getInspections()) 
    { 
    ListViewItem item = new ListViewItem(); 
    item.Text=anInspector.getInspectorName().ToString(); 
    item.SubItems.Add(inspection.getInspectionDate().ToShortDateString()); 
    item.SubItems.Add(inspection.getHouse().getAddress().ToString()); 
    item.SubItems.Add(inspection.getHouse().getValue().ToString("C")); 
    listView1.Items.Add(item); 
    } 

Đó là mã xuất ra như sau trong ListView (tất nhiên phụ thuộc như thế nào nhiều mục bạn có trong Bộ sưu tập danh sách):

Về cơ bản, cột đầu tiên là một listviewitem chứa nhiều phần phụ (các cột khác). Nó có vẻ lạ nhưng listview là rất linh hoạt, bạn thậm chí có thể xây dựng một cửa sổ giống như thám hiểm tập tin với nó!

+0

Logic này phải ở trong lớp 'Kiểm tra' vì nó phải biết tất cả các bên trong ... – ja72

1

Tuyệt vời !! Nó đã giúp tôi rất nhiều. Tôi sử dụng để làm như vậy bằng cách sử dụng VB6 nhưng bây giờ nó là hoàn toàn khác nhau. chúng tôi nên thêm điều này

listView1.View = System.Windows.Forms.View.Details; 
listView1.GridLines = true; 
listView1.FullRowSelect = true; 
3

Tôi đã tinh chỉnh điều này bằng phương pháp tiện ích mở rộng trên ListViewItemsCollection. Theo ý kiến ​​của tôi, nó làm cho mã gọi điện thoại súc tích hơn và cũng thúc đẩy tái sử dụng tổng quát hơn.

internal static class ListViewItemCollectionExtender 
{ 
    internal static void AddWithTextAndSubItems(
            this ListView.ListViewItemCollection col, 
            string text, params string[] subItems) 
    { 
     var item = new ListViewItem(text); 
     foreach (var subItem in subItems) 
     { 
      item.SubItems.Add(subItem); 
     } 
     col.Add(item); 
    } 
} 

Gọi AddWithTextAndSubItems trông như thế này:

// can have many sub items as it's string array 
myListViewControl.Items.AddWithTextAndSubItems("Text", "Sub Item 1", "Sub Item 2"); 

Hope this helps!

+0

Rất đẹp, nhưng cái gì được truyền dưới dạng ListView.ListViewItemCollection khi gọi phương thức mở rộng này? –

+0

@ClayShannon: vì nó là một phương pháp mở rộng, nó "mở rộng" hành vi của .NET FX ListView.ListViewItemCollection. Trình biên dịch biến kiểu phương thức mở rộng thành một cuộc gọi đến phương thức tĩnh. Vì vậy, 'myListViewControl.Items.AddWithTextAndSubItems (" Văn bản "," Mục phụ 1 "," Mục phụ 2 ");' trở thành 'ListViewItemCollectionExtender.AddWithTextAndSubItems (myListViewControl.Items," Văn bản "," Mục phụ 1 "," Mục phụ 2 ");" Biên dịch ma thuật !! – BrianB

2

add:

.SubItems.Add("asdasdasd"); 

đến dòng cuối cùng của mã của bạn vì vậy nó sẽ giống như thế này cuối cùng.

listView1.Items.Add("sdasdasdasd").SubItems.Add("asdasdasd"); 
1

chung:

ListViewItem item = new ListViewItem("Column1Text") 
    { Tag = optionalRefToSourceObject }; 

item.SubItems.Add("Column2Text"); 
item.SubItems.Add("Column3Text"); 
myListView.Items.Add(item); 
3

Tôi nghĩ/Cách nhanh nhất neatest để làm điều này:

Đối với mỗi lớp có string[] obj.ToListViewItem() phương pháp và sau đó làm điều này:

foreach(var item in personList) 
{ 
    listView1.Items.Add(new ListViewItem(item.ToListViewItem())); 
} 

đây là định nghĩa ví dụ

public class Person 
{ 
    public string Name { get; set; } 
    public string Address { get; set; } 
    public DateTime DOB { get; set; } 
    public uint ID { get; set; } 

    public string[] ToListViewItem() 
    { 
     return new string[] { 
      ID.ToString("000000"), 
      Name, 
      Address, 
      DOB.ToShortDateString() 
     }; 
    } 
} 

Là một tiền thưởng thêm, bạn có thể có một phương pháp static trả ColumnHeader[] danh sách cho việc thiết lập các cột listview với

listView1.Columns.AddRange(Person.ListViewHeaders()); 
Các vấn đề liên quan