2012-07-03 45 views
11

Tôi đang học cách sử dụng listView trong một số windowsForm và tôi có một số vấn đề mà tôi hy vọng sẽ giải quyết ở đây. Việc đầu tiên là khi tôi là tạo ra các cột với mã dưới đây:Tạo cột trong listView và thêm các mục

private void initListView() 
    { 
     // Add columns 
     lvRegAnimals.Columns.Add("Id", -3,HorizontalAlignment.Left); 
     lvRegAnimals.Columns.Add("Name", -3, HorizontalAlignment.Left); 
     lvRegAnimals.Columns.Add("Age", -3, HorizontalAlignment.Left); 
    } 

Khi tôi chạy chương trình, tên của các cột không thể nhìn thấy, họ là tất cả ở góc bên trái và tôi phải "kéo" chúng để có thể đọc được văn bản. Tôi đã làm gì sai?

Và cuối cùng tôi tự hỏi cách tôi thêm các mục vào các cột. Trước tiên, tôi có tạo một đối tượng như

ListViewItem item1 = new ListViewItem(???); 
item1.SubItems.Add("text"); 

Mỗi danh sáchViewItem có phải là một cột hoặc một hàng không? Làm cách nào để thêm hàng thông tin? Chuẩn bị một số trợ giúp! Cảm ơn!

Trả lời

31

Vấn đề đầu tiên của bạn là bạn đang chuyển -3 đến tham số thứ 2 của Cột. Nó cần phải là -2 để nó tự động kích thước cột. Nguồn: http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.columns.aspx (nhìn vào bình luận trên ví dụ mã ở phía dưới)

private void initListView() 
{ 
    // Add columns 
    lvRegAnimals.Columns.Add("Id", -2,HorizontalAlignment.Left); 
    lvRegAnimals.Columns.Add("Name", -2, HorizontalAlignment.Left); 
    lvRegAnimals.Columns.Add("Age", -2, HorizontalAlignment.Left); 
} 

Bạn cũng có thể sử dụng quá tải khác, Add (string). Ví dụ:

lvRegAnimals.Columns.Add("Id"); 
lvRegAnimals.Columns.Add("Name"); 
lvRegAnimals.Columns.Add("Age"); 

tham khảo để biết thêm quá tải: http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.columnheadercollection.aspx

Thứ hai, để thêm các mục vào ListView, bạn cần phải tạo ra các trường hợp của ListViewItem và thêm chúng vào bộ sưu tập Items của ListView. Bạn sẽ cần sử dụng hàm tạo chuỗi [].

var item1 = new ListViewItem(new[] {"id123", "Tom", "24"}); 
var item2 = new ListViewItem(new[] {person.Id, person.Name, person.Age}); 
lvRegAnimals.Items.Add(item1); 
lvRegAnimals.Items.Add(item2); 

Bạn cũng có thể lưu trữ các đối tượng trong thuộc tính Thẻ của mặt hàng đó.

item2.Tag = person; 

Và sau đó bạn có thể trích xuất nó

var person = item2.Tag as Person; 

Hãy cho tôi biết nếu bạn có bất cứ thắc mắc và tôi hy vọng điều này sẽ giúp!

+0

Cảm ơn sự giúp đỡ! Tôi sẽ thử mã này sau hoặc ngày mai. Có lẽ tôi có thể trả lại cho bạn nếu tôi có một số câu hỏi về nó. –

+0

nó không có bất kỳ nhà xây dựng quá tải cho mảng chuỗi đánh máy ngầm? – Charlie

+1

@Charlie, tôi giả sử bạn đang đề cập đến các nhà xây dựng quá tải của ListViewItem? Nếu bạn muốn tạo một ListViewItem với SubItems từ hàm tạo, bạn có thể sử dụng quá tải chuỗi [] hoặc quá tải ListViewSubItem []. Tôi đang sử dụng [] mới thay vì chuỗi mới [] vì C# có thể tự động suy ra kiểu (đó là chuỗi trong trường hợp này). Xem https://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem.listviewitem(v=vs.110).aspx – Tom

24

Tôi không thấy ai trả lời câu hỏi này một cách chính xác. Vì vậy, tôi đăng nó ở đây. Để có được các cột hiển thị, bạn cần chỉ định dòng sau.

lvRegAnimals.View = View.Details; 

Và sau đó thêm các cột của bạn sau đó.

lvRegAnimals.Columns.Add("Id", -2, HorizontalAlignment.Left); 
lvRegAnimals.Columns.Add("Name", -2, HorizontalAlignment.Left); 
lvRegAnimals.Columns.Add("Age", -2, HorizontalAlignment.Left); 

Hy vọng điều này sẽ giúp bất kỳ ai khác tìm kiếm câu trả lời này trong tương lai.

+3

Đây phải là câu trả lời đúng – lzt

3

Bạn cần phải thiết lập thuộc tính cho điều khiển:

listView1.View = View.Details; 
+0

thuộc tính này làm gì>/ –

+0

* Thuộc tính này làm gì * - ListViews được sử dụng trong tiêu chuẩn "Windows Explorer", vì vậy hãy tưởng tượng ** Xem chi tiết ** trong trình duyệt tệp/thư mục chuẩn . –

+0

Nó sẽ hiển thị cấu trúc lưới. Xin lỗi. hãy thử nó cho chính mình. –

0
  listView1.View = View.Details; 
     listView1.Columns.Add("Target No.", 83, HorizontalAlignment.Center); 
     listView1.Columns.Add(" Range ", 100, HorizontalAlignment.Center); 
     listView1.Columns.Add(" Azimuth ", 100, HorizontalAlignment.Center);  

tôi cũng đã có cùng một vấn đề .. i kéo cột sang trái .. nhưng bây giờ ok .. vì vậy hãy nói rằng tôi có 283 * 196 kích thước của listview ..... Chúng tôi khai báo trong chiều rộng cột -2 cho chiều rộng tự động .. Để phù hợp trong listview, chúng ta có thể chia chiều rộng listview thành 3 phần (83,100,100) ...

+0

Không chỉ đăng mã, bạn cần thêm giải thích. – reformed

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