2013-02-04 47 views
12

Trong bàn của tôi, tôi có một lĩnh vực firstnamelastname, bây giờ những gì tôi muốn là để thiết lập firstnamelastname như displaymember trong combobox, nhưng tôi không biết làm thế nào để làm nó.Làm thế nào để nối thêm hai giá trị trường trong thành viên hiển thị combobox trong C#

Something như thế này

cmbEmployees.DataSource = GetEmployees(); 
//something like below line which doesn't work 
cmbEmployees.DisplayMember = "lastname, first_name";  
cmbEmployees.ValueMember = "id"; 

Làm thế nào tôi có thể đạt được điều này? Vì vậy mà cả hai lastnamefirstname sẽ được hiển thị trong combobox

+1

Bạn có thể thêm thuộc tính kết hợp hai tên. – JosephHirn

+0

Theo mặc định, điều khiển sẽ hiển thị những gì được trả về bởi phương thức ToString, vì vậy bạn có thể ghi đè điều đó. –

Trả lời

20

Hãy nói rằng bạn đã có một lớp như thế này:

class Person 
{ 
    public string FirstName 
    { 
     get; 
     set; 
    } 

    public string LastName 
    { 
     get; 
     set; 
    } 

    public string FullName 
    { 
     get 
     { 
      return LastName + ", " + FirstName; 
     } 
    } 

    public Person(string firstname, string lastname) 
    { 
     FirstName = firstname; 
     LastName = lastname; 
    } 
} 

Nếu bạn không có một tài sản FullName, chỉ cần tạo một trong các định dạng mà bạn muốn để hiển thị tên. Sau đó, đặt DisplayMember bằng FullName.

16

truy vấn của bạn nên được như thế này trong GetEmployees() chức năng.

"SELECT id,(lastname + ' ' + first_name) AS NAME FROM TABLE" 

cmbEmployees.DataSource = GetEmployees(); 
cmbEmployees.DisplayMember = "NAME"; 
cmbEmployees.ValueMember = "id"; 
+0

siêu yêu thích nó :) – oozmac

38

Ví dụ này sẽ hướng dẫn bạn cách thực hiện điều đó mà không sửa đổi lớp cơ sở của bạn.

Trước tiên, bạn có thể để lại DisplayMember của bạn với một thuộc tính, chúng ta hãy nói:

cmbEmployees.DisplayMember = "lastname"; 

Bây giờ, đi đến biểu mẫu trong [Thiết kế] chế độ, nhấp chuột phải vào ComboBox -> Properties.

Ở phía trên của cửa sổ Properties, nhấp vào Sự kiện (biểu tượng sét),

nhìn cho Format trong những sự kiện danh sách dưới đây (dưới Thay đổi tài sản) và gõ có một số tên sự kiện, chúng ta hãy nói: ComboBoxFormat, và bấm phím Enter. Bạn sẽ thấy điều này:

private void ComboBoxFormat(object sender, ListControlConvertEventArgs e) 
{ 

} 

Và bây giờ viết những dòng bên dưới bên:

private void ComboBoxFormat(object sender, ListControlConvertEventArgs e) 
{ 
    // Assuming your class called Employee , and Firstname & Lastname are the fields 
    string lastname = ((Employee)e.ListItem).Firstname; 
    string firstname = ((Employee)e.ListItem).Lastname; 
    e.Value = lastname + " " + firstname; 
} 

Vậy là xong;)

+0

đó là giải pháp tuyệt vời –

+0

Giải pháp rất sạch! Xin lưu ý rằng nó hoạt động tốt ngay cả khi lớp nguồn không phải là của bạn. Ví dụ tôi cần nó cho liệt kê System.IO.SerialPort, bây giờ tôi không cần phải tạo một lớp học kế thừa "ad hoc". – tedebus

+0

Eliran, bạn có thể giải thích làm thế nào để thiết lập này? Trường hợp bạn đã nhận được FirstName, tôi không biết một lĩnh vực có nghĩa là gì trong trường hợp này. Tôi databind combobox bằng cách sử dụng datatable và thiết lập Display và ValueMember dựa trên những gì tên cột datatable được. – LuckyLuke82

2

trong C# 6 tạo tài sản readonly trong class Employee của bạn

public string FullName=>$"{lastname} {firstname}"; 

rồi

cmbEmployees.DataSource = GetEmployees(); 
//something like below line which doesn't work 
cmbEmployees.DisplayMember = "FullName";  
cmbEmployees.ValueMember = "id"; 
Các vấn đề liên quan