2010-04-25 8 views
5

Tôi đang cố gắng liên kết bộ sưu tập với một DataGridView. Khi nó quay ra nó không thể cho người dùng chỉnh sửa bất cứ điều gì trong DataGridView này mặc dù EditMode được thiết lập để EditOnKeystrokeOrF2.
Đây là mã đơn giản:Bộ sưu tập ràng buộc vào DataGridView trong Windows Forms

public Supplies() 
{ 
    InitializeComponent(); 
    List<string> l = new <string>(); 
    l.Add("hello"); 
    this.SuppliesDataGridView.DataSource = l; 
} 

Nó cũng không hoạt động khi tôi thay đổi kiểu bộ sưu tập để SortableBindingList, từ điển hoặc thậm chí sử dụng một BindingSource.

Điều gì có thể xảy ra ở đây?

Trả lời

0

Khi bạn đã đặt thuộc tính DataSource thì bạn sẽ muốn kích hoạt phương thức DataBind().

this.SuppliesDataGridView.DataSource = l; 
this.SuppliesDataGridView.DataBind(); 

UPDATE:

Như bạn một cách đúng đắn chỉ ra trong các ý kiến, phương pháp DataBind() không tồn tại để kiểm soát này.

Liên kết này có thể cung cấp một số thông tin hữu ích: http://msdn.microsoft.com/en-us/library/fbk67b6z%28v=VS.90%29.aspx

+0

Không có phương thức như vậy trong SuppliesDataGridView. – Sergey

2

Hãy thử điều này:

public class CustomCollection { public string Value { get; set; } } 

    public Supplies() 
    { 
     InitializeComponent(); 
     List<CustomCollection> l = new List<CustomCollection> { new CustomCollection { Value = "hello" } }; 
     this.SuppliesDataGridView.DataSource = l; 
    } 
5

Đối với tôi, phương pháp sau đây hoạt động như mong đợi:

  • Mở ở dạng của bạn (usercontrol, vv) với nhà thiết kế
  • Thêm BindingSource vào biểu mẫu của bạn
  • Chọn BindingSource trong biểu mẫu và mở các thuộc tính trang
  • Chọn thuộc tính DataSource và click vào mũi tên xuống
  • Bấm vào Thêm nguồn dữ liệu dự án
  • Chọn Object
  • Chọn đối tượng loại bạn muốn xử lý
    • Đây phải là loại sẽ được bộ sưu tập của bạn xử lý chứ không phải chính CustomCollection!
  • Hiện các nguồn dữ liệu có sẵn bằng cách chọn từ các dữ liệu thanh menu - Hiện Data Sources
  • Kéo và Thả itemtype của bạn từ DatasSources vào mẫu của bạn
  • Go vào mã của hình thức và ràng buộc của bạn CustomCollection của bạn để BindingSource

    var cc = new CustomCollection(); 
        bindingSource1.DataSource = cc; 
    

chú:
DataGridView chỉ là phần cuối cùng trong chuỗi của bạn để (dis) cho phép thay đổi, thêm và loại bỏ các đối tượng khỏi danh sách của bạn (hoặc CustomCollection).Ngoài ra còn có một thuộc tính AllowNew trong BindingSource và giao diện ICollection có thuộc tính IsReadOnly phải được đặt thành false để cho phép chỉnh sửa. Cuối cùng nhưng không kém phần quan trọng, các thuộc tính của lớp của bạn trong bộ sưu tập phải có phương thức setter công cộng để cho phép thay đổi một giá trị.

+0

Tôi đã thực hiện những gì bạn đã làm, nhưng khi tôi cố gắng thêm một đối tượng mới vào danh sách DataGridView không làm mới, mặc dù chính danh sách đó là chính xác và việc đưa DataSource của ràng buộc trả về một danh sách đúng. –

+0

Nếu bạn thao tác bộ sưu tập (thêm, xóa, chèn, xóa), nguồn ràng buộc phải được thông báo về thay đổi đó. Hoặc bạn thực hiện 'IBindingList' và tăng sự kiện ListChanged khi cần thiết; sử dụng thay vì tập hợp bình thường của bạn 'BindingList ' hoặc bạn gọi 'bindingSource.ResetBindings (false)' – Oliver