2009-07-09 38 views
7

Tôi có một IList<string> trở về từ một hàm (như biến lst) và tôi thiết lập và sau đó tôi.NET/C# Binding IList <string> đến một DataGridView

this.dataGridView1.DataSource = lst; 

Các DataGrid thêm một cột có nhãn Chiều dài và sau đó liệt kê các chiều dài của mỗi chuỗi. Làm cách nào để làm cho nó chỉ liệt kê các chuỗi?

+1

Liệu IList của bạn chỉ chứa Strings? hoặc nó có chứa một số loại khác, ''? – Nate

+0

uh ... anh ấy nói đó là một số IList ... – Clyde

Trả lời

13

Bạn thực sự cần một danh sách các đối tượng mà một thuộc tính chuỗi. Với .NET 3.5 bạn có thể gian lận:

.DataSource = list.Select(x=>new {Value = x}).ToList(); 

Nếu không tạo ra một lớp giả và sao chép dữ liệu trong tay ...

+0

Chính xác những gì tôi đang tìm kiếm, các loại ẩn danh là điều tuyệt vời cho loại điều này. –

+0

Nhưng nếu bạn thay đổi giá trị danh sách thì DataGridView sẽ KHÔNG udpdate ... – Pedro77

1

Điều này là do DataGridViews hiển thị các thuộc tính của đối tượng. Trong trường hợp này, Danh sách chỉ có một thuộc tính "Độ dài", do đó, nó chỉ có thể hiển thị "Chiều dài" (bất kể kiểu dữ liệu). Bạn cần phải tạo một lớp bao bọc để đạt được những gì bạn muốn (một lớp "MyString" với thuộc tính của "Văn bản", sau đó có một Danh sách được hiển thị trong lưới của bạn).

Hope this helps

Thêm Mã số Ví dụ

class MyString 
    { 
     private string _text; 
     public string Text 
     { get 
      { 
       return _text; 
      } 
      set 
      { 
       _text = value; 
      } 
     } 

    } 

'Trong hình thức thực hiện

private List<MyString> foo() 
     { 
      List<MyString> lst = new List<MyString>(); 
      MyString one = new MyString(); 
      MyString two = new MyString(); 
      one.Text = "Hello"; 
      two.Text = "Goodbye"; 
      lst.Add(one); 
      lst.Add(two); 
      return lst; 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      dataGridView1.DataSource = foo(); 

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