2012-04-22 32 views
13

Tôi có thể trực tiếp liên kết điều khiển DataGridView của tôi với một danh sách ràng buộc của các đối tượng kinh doanh của tôi bằng cách đặt thuộc tính DataSource. Đối tượng kinh doanh của tôi thực hiện INotifyPropertyChanged, do đó, DGV được cập nhật khi một mục mới được thêm vào danh sách ràng buộc hoặc một hiện tại được cập nhật.Lợi ích của việc sử dụng một bindingsource với danh sách ràng buộc <business obj> làm nguồn dữ liệu là gì?

Đối với việc xử lý các bản ghi duy nhất, tôi có thể ràng buộc đối tượng kinh doanh của mình với hộp văn bản và các điều khiển có liên quan khác.

Tôi cũng có thể xuất phát từ BindingList và tạo ra một lớp CustomBindingList để thực hiện phương pháp cần thiết của IBindable, như được giải thích trong các liên kết dưới đây: http://msdn.microsoft.com/en-us/library/aa480736.aspx

người Ngoài ra, tôi đã thấy khuyên bạn sử dụng một BindingSource. Datasource của BindingSource là đối tượng kinh doanh và DataSource của DGV là BindingSource.

Trong mọi trường hợp, dựa trên một BindingSource không cung cấp cho tôi:

  1. Filtering (lọc không hoạt động). Việc triển khai cần được tôi cung cấp.
  2. Sắp xếp và Tìm kiếm không hoạt động. Việc triển khai cần được tôi cung cấp.

Vì vậy, tại sao phương pháp tiếp cận BindingSource được đề nghị?

Ảnh rộng hơn: Mới đối với khái niệm OOPS và C#. Làm việc với các ứng dụng Cơ sở dữ liệu. Winforms. Cho đến nay chỉ sử dụng phương pháp DataSet/DataTable. Bây giờ cố gắng tạo và sử dụng các lớp tùy chỉnh của riêng tôi.

Thường có biểu mẫu Chính/Chi tiết. Khi tôi nhấp vào một hàng Chi tiết trong DGV, tôi muốn chỉnh sửa bản ghi đó trong một cửa sổ riêng biệt. Vì vậy, tôi cần phải có được một xử lý trên mục danh sách đại diện bởi hàng đó trong DGV. Cố gắng tìm một giải pháp cho điều đó đã mang tôi đến điểm này và nghi ngờ này.

Với những gì tôi muốn làm, cách tiếp cận nào tốt hơn và tại sao?

Một số con trỏ ở đây sẽ thực sự hữu ích vì tôi rất mới mẻ với điều này.

+0

Bản sao có thể có của [C# DataGridView.DataSource khác biệt giữa việc sử dụng BindingSource và không] (http://stackoverflow.com/questions/4433281/c-sharp-datagridview-datasource-difference-between-using-bindingsource-and-not) –

Trả lời

1

Chúng tôi đề nghị sử dụng một BindingSource khi nhiều điều kiểm trên form sử dụng nguồn dữ liệu tương tự (Behind the Scenes: Improvements to Windows Forms Data Binding)

Thiết kế-thời gian: Cá nhân tôi thấy BindingSource rất hữu ích khi lựa chọn các thuộc tính từ đối tượng doanh nghiệp của tôi khi databinding để điều khiển.

Để xử lý hàng hiện được chọn, hãy thử bindingSource1.Current as MyBusinessObject;

Để lọc và tìm kiếm: Tôi sử dụng dll của bên thứ ba cho các lưới đã triển khai. Vì vậy, không thể giúp bạn với điều đó, xin lỗi.

Khi bạn làm việc với danh sách các loại khác nhau của các đối tượng kinh doanh, không sử dụng danh sách trực tiếp

List<IAnimal> animals = new List<IAnimal>(); 
animals.Add(new Cat()); 
animals.Add(new Dog()); 
bindingSource1.DataSource = animals; 

Thay vì sử dụng một BindingList như thế này:

bindingSource1.DataSource = new BindingList<IAnimal>(animals); 

Điều đó sẽ đảm bảo tất cả truy cập các đối tượng trong danh sách có kiểu IAnimal và tiết kiệm cho bạn một số ngoại lệ.

0

Ràng buộc với nguồn dữ liệu có thể cung cấp cho bạn lợi ích khi giao dịch với bộ lớn chỉ một phần được hiển thị. Ví dụ nếu bạn nhìn vào ListView Telerik ở đây http://www.telerik.com/help/winforms/listview-databinding.html (có rất nhiều các gói thành phần, đây chỉ là một trong những mới nhất tôi đang sử dụng bit và miếng từ).

Chế độ xem rất nhẹ và cho phép vị trí cuộn của bạn xác định đối tượng nào cần được hiển thị thực sự. Vì vậy, nếu bạn chỉ nhìn vào 10 đối tượng đầu tiên và không bao giờ di chuyển xuống chỉ có 10 bị ràng buộc và hiển thị. Điều này có khả năng tránh được rất nhiều quyền truy cập dữ liệu không cần thiết.

Chức năng GridView của chúng theo cùng cách thức. Có một phần hiển thị của lưới mà là tách biệt với lưới tiềm ẩn tiềm ẩn rất lớn.

Là phần thưởng, bạn sẽ có được lọc, sắp xếp, nhóm.

-2

Theo như tôi biết, nếu bạn đang làm việc với một cơ sở dữ liệu , bạn sử dụng một BindingSource ở giữa để thiết lập một cầu nối song phương giữa cơ sở dữ liệu và kiểm soát của bạn. Nếu không, bạn chỉ có thể sử dụng bindingList làm nguồn để kiểm soát.

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