2017-12-12 119 views
7

Tôi có một số System.Windows.Forms.Listbox và một tập hợp các giá trị kiểu tuple mà tôi đã tạo. Tức là, the new tuple type introduced in C# 7.0. Tôi đang cố gắng liên kết bộ sưu tập với số Listbox và đặt DisplayMember thành một trong các thành phần trong bộ dữ liệu. Dưới đây là ví dụ:Làm cách nào để liên kết một tập hợp các giá trị kiểu tuple C# 7.0 với System.Windows.Forms.Listbox và đặt thành viên hiển thị thành một trong các thành phần?

var l = new List<(string name, int ID)>() 
{ 
    ("Bob", 1), 
    ("Mary", 2), 
    ("Beth", 3) 
}; 

listBox1.DataSource = l; 
listBox1.DisplayMember = "name"; 

Điều đó không hiệu quả. Với phong cách cũ-Tuple<T> bạn cho là có thể làm gì được mô tả in this answer:

listBox1.DisplayMember = "Item1"; 
listBox1.ValueMember = "Item3"; // optional 

Điều đó không làm việc, hoặc. Đây là những gì tôi nhìn thấy trong cả hai trường hợp:

enter image description here

Làm thế nào tôi có thể thực hiện điều này?

Trả lời

7

Câu trả lời của Ivan, mô tả rõ ràng trường hợp. Là một workaround bạn có thể sử dụng Format trường hợp ListBox để hiển thị name nộp:

private void listBox1_Format(object sender, ListControlConvertEventArgs e) 
{ 
    e.Value = (((string name, int ID))e.ListItem).name; 
} 
+0

Cảm ơn bạn, đó là một công việc thông minh. –

8

Rất tiếc, không thể sử dụng bộ giá trị C# 7 cho ràng buộc dữ liệu vì chúng sử dụng fields, trong khi liên kết dữ liệu chuẩn của Windows Forms chỉ hoạt động với thuộc tính.

+0

Cảm ơn lời giải thích, Ivan. –

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