2012-09-27 24 views
6

Tôi có biểu mẫu chụp cho Đơn đặt hàng hoạt động và có CustomerBindingSource và điều khiển WorksOrderBindingSource. Hầu hết các trường chỉnh sửa được liên kết với WorksOrderBindingSource, với ComboBox có danh sách được liên kết với CustomerBindingSourceSelectedValue của nó được gắn với trường CustomerId trong WorksOrderBindingSource. Đây là tất cả rất thường xuyên và tiêu chuẩn, không có funnies ở đây.Làm cách nào để đặt bản ghi hiện tại BindingSource thành null?

Sau đó, tôi cũng có một số trường hộp văn bản mà tôi sử dụng để hiển thị các thuộc tính của khách hàng hiện được chọn, cho thứ tự công việc hiện đang được chỉnh sửa. Tôi đã ràng buộc các trường này với số CustomerBindingSource. Khi khách hàng được chọn, các trường này sẽ hiển thị các thuộc tính của khách hàng đó như mong đợi.

Vấn đề của tôi là khi tôi muốn sử dụng biểu mẫu để chụp một đơn đặt hàng mới. Tôi tạo đối tượng WorksOrder mới, với CustomerId == null và gắn nó với WorksOrderBindingSource. Tôi không có đối tượng trong số CustomerBindingSource với số Id == null, vì vậy, như dự kiến, hộp tổ hợp thả xuống trống, nhưng, các thuộc tính CustomerBindingSource.Current trỏ đến đối tượng Khách hàng đầu tiên trong nguồn dữ liệu đó. Các trường hiển thị được liên kết với khách hàng hiển thị các giá trị cho khách hàng đó, trong khi chưa có khách hàng nào được chọn.

Cách giải quyết duy nhất cho điều này rõ ràng đối với tôi có vẻ vụng về. Trong đó, tôi có hai Khách hàng đã nhập các nguồn ràng buộc, một cho một khách hàng đã chọn và để điền vào các trường hiển thị của khách hàng, và một trường khác chỉ đơn thuần là điền vào danh sách thả xuống của khách hàng. Sau đó, tôi phải xử lý một sự kiện lựa chọn và chỉ khi một khách hàng được chọn, sau đó tìm thấy khách hàng đó trong nguồn ràng buộc cho các trường hiển thị và nếu không có lựa chọn nào, hãy đặt nguồn dữ liệu cho các trường hiển thị thành rỗng. Điều này cảm thấy khủng khiếp vụng về. Có cách nào khác để đạt được những gì tôi muốn không?

+0

Tại sao không thêm mục "vui lòng chọn khách hàng" vào nguồn ràng buộc? – Bijan

+0

Điều gì về để buộc người dùng lưu các chỉnh sửa hiện tại để một CustomerID hợp lệ được gán cho NewRow –

Trả lời

1

tôi thấy chủ đề này với chính xác vấn đề của tôi nhưng không thỏa mãn câu trả lời. Tôi biết một chủ đề cũ của nó nhưng alah ..

Tôi đã kết thúc với một giải pháp làm việc: Tôi đã thêm một sự kiện [PositionChanged] vào bindingsource của tôi (sẽ là CustomerBindingSource của bạn).

 private void CustomerBindingSource_PositionChanged(object sender, EventArgs e) 
    { 
     if(<yourCombobox>.SelectedIndex==-1) 
     { 
      CustomerBindingSource.SuspendBinding(); 
     } 
     else 
     { 
      CustomerBindingSource.ResumeBinding(); 
     } 
    } 
0

gì tôi sử dụng để "rõ ràng" một BindingSource là chỉ cần thiết lập DataSource của nó như thế này:

CustomerBindingSource.DataSource = typeof (khách hàng);

Hy vọng điều này sẽ hữu ích.

EDIT:

Để rõ ràng, khi bạn thiết lập thuộc tính BindingSource.DataSource như mô tả, không có gì ngăn cản bạn gán các nguồn dữ liệu ban đầu tại một điểm sau:

//Retrieve customers from database 
List<Customer> Customers = WhatEverCallToDB(); 
CustomerBindingSource.DataSource = Customers; 

... 

//Later we need to blank the Customer fields on the Windows Form 
CustomerBindingSource.DataSource = typeof(Customer); 

... 

//Then again at a later point we can restore the BindingSource: 
CustomerBindingSource.DataSource = Customers; 

... 
+1

Tôi không muốn xóa nguồn ràng buộc. Tôi muốn nó được biết rằng không có một bản ghi trong nguồn ràng buộc được chọn, hoặc 'hoạt động'. – ProfK

+0

Tôi nghĩ bạn có nghĩa là khi bạn tạo một WorkOrder mới, bạn muốn "trống" ra các trường liên quan đến Khách hàng. Nếu vậy, thì phương pháp của tôi sẽ hoạt động, nhưng nếu tôi hiểu lầm trường hợp sử dụng của bạn, bạn có thể làm rõ không? –

+1

Tôi muốn xóa các trường liên quan đến khách hàng, nhưng tôi không muốn mất tập hợp các bản ghi khách hàng trong 'CustomerBindingSource.DataSource'. Tôi chỉ muốn không có hồ sơ nào được chọn. – ProfK

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