2008-12-17 26 views
13

Tôi hiện đang sử dụng winforms databinding để kết nối một biểu mẫu chỉnh sửa dữ liệu. Tôi đang sử dụng khuôn khổ netTiers thông qua CodeSmith để tạo ra các đối tượng dữ liệu của tôi. Đối với các trường cơ sở dữ liệu cho phép null, nó tạo ra các kiểu nullable. Tôi đã tìm thấy rằng bằng cách sử dụng winforms databinding các điều khiển sẽ không ràng buộc đúng với các loại nullable.Cách tốt nhất để databind một Winforms kiểm soát một loại nullable?

Tôi đã thấy các giải pháp trực tuyến gợi ý rằng mọi người tạo các lớp hộp văn bản mới có thể xử lý các loại nullable nhưng đó có thể là nỗi đau phải hoán đổi các hộp văn bản trên biểu mẫu mà tôi đã tạo.

Ban đầu, tôi nghĩ sẽ tuyệt vời khi sử dụng phương pháp mở rộng để thực hiện. Về cơ bản tạo một thuộc tính mở rộng cho lớp textbox và liên kết với nó. Từ kinh nghiệm phương pháp mở rộng hạn chế của tôi và làm một chút kiểm tra trực tuyến có vẻ như bạn không thể làm một tài sản mở rộng. Theo như tôi có thể nói, ràng buộc phải được thông qua một tài sản vì nó cần để có thể nhận được hoặc thiết lập giá trị để một phương pháp mở rộng sẽ không hoạt động.

Tôi muốn tìm một cách sạch sẽ để trang bị thêm các biểu mẫu này bằng cách sử dụng một cái gì đó như các phương pháp mở rộng, nhưng nếu tôi phải tạo hộp điều khiển hộp văn bản và combo mới đó là những gì tôi sẽ làm.

Dự án của tôi hiện bị giới hạn ở .Net 2.0 do yêu cầu chạy trên Windows 2000.

Mọi đề xuất?

Trả lời

31

Trong phần bình luận của bài viết tham chiếu ở trên một trong những áp phích đi lên với một giải pháp đơn giản.

Thay vì ràng buộc với:

textBox1.DataBindings.Add("Text", myClass, "MyTextProperty"); 

Bind với:

textBox1.DataBindings.Add("Text", myClass, "MyTextProperty", true, DataSourceUpdateMode.OnPropertyChanged, string.Empty); 
1

Ooh, khó chịu ... Tôi chỉ có thể nghĩ ra một vài cách để đạt được điều này và không phải của chúng là những gì tôi sẽ gọi là lý tưởng.

  • Đầu tiên là viết trình bao bọc cho đối tượng dữ liệu chứa các giá trị rỗng có thể chuyển đổi tất cả các giá trị rỗng thành chuỗi rỗng. Liên kết với đối tượng bao bọc của bạn.

  • Thứ hai là để đảm bảo rằng tất cả các giá trị trong cơ sở dữ liệu của bạn không phải là null ... một lần nữa, không lý tưởng

  • Thứ ba bạn đã quyết định là không khả thi trong tình huống này là bạn tạo một đối tượng tùy chỉnh mở rộng hộp văn bản để thêm một thuộc tính có thể liên kết với một giá trị rỗng.

  • Cách lý tưởng thứ tư mà tôi có thể nghĩ là không thể thực hiện được. Tạo một thuộc tính mở rộng cho phép bạn mở rộng tất cả các đối tượng hộp văn bản và liên kết với nó - nhưng nó không xuất hiện các thuộc tính mở rộng có thể có tại thời điểm này. Dường như đây là một tình huống mà loại tính năng này sẽ đặc biệt hữu ích trong khung công tác .NET.

5

Tôi vừa tình cờ gặp vấn đề này và đó là một cơn đau đầu thực sự.

Điều thú vị về các loại gắn kết vô hiệu hóa là một DataGridView xử lý chúng mà không gặp bất kỳ sự cố nào - đó chỉ là các hộp văn bản gây ra sự cố.

Nó khá khó chịu - thậm chí nó dường như ngăn chặn đóng biểu mẫu khi bạn có giá trị trống trong hộp văn bản và có vẻ như bạn cũng không thể rời khỏi nó.

Vì vậy, nó không phải là một câu trả lời tuyệt vời, nhưng đề nghị của tôi là cố gắng gắn bó với các bản ghi dữ liệu cho các kiểu nullable trên một biểu mẫu.

gợi ý khác là sử dụng một 'nhà cung cấp mở rộng' như đề xuất ở đây mặc dù tôi đã không kiểm tra nó được nêu ra:

EDIT: bây giờ đã tải về các mẫu mã trên trang này và nó hoạt động rực rỡ.

http://www.thejoyofcode.com/Databinding_and_Nullable_types_in_WinForms.NET.aspx

+0

liên kết không hoạt động nữa. – AlexP11223

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