Now let's suppose you want to display the order on a separate form. On the first form you'll display a list of customers and a list of orders for each customer within a DataGridView. Let's say you want to show the selected order with OrderDetails on another form. Using the CurrentItem
property of the DataConnector you can easily pass this information between two forms.
You'll start by adding a new form to your exe project named OrderForm
. You'll add the Order controls to the form and then expose a property to set the current order displayed on the form.
First let's leverage the Drag Once databinding features of the Data Sources Window. With the OrderForm
active in the Form Designer, activate the Data Sources Window. Expand the Customer object to see the Orders object. Change the DropType
of the Orders property to Details
|To get an overview of all the controls on the form you can use the Document Outline. From the View menu, select Other Windows and then choose Document Outline. (see Figure 5)|
You also want to create the customer information for this particular order. Notice how the Orders object has the Customer
property. If you look at the DropTypes
available, you'll notice you can only see Details
. The Data Sources Window can tell that this isn't a collection but rather a single instance. Let's change the Orders.Customer DropType
. Now drag the Orders property to the OrderForm
. Notice how you only have one DataConnector for the OrdersDataConnector. Visual Studio is smart enough to know that there will only ever be one Customer object for the OrderDataConnector, so it doesn't create another DataConnector. If you drag just the customer node from the Data Sources Window a second time, you'll notice Visual Studio 2005 does create a CustomerDataConnector. This is just a bug. After Beta1 Visual Studio will reuse DataConnectors configured to the same node in the Data Sources Window. For this form you'll only show one Order at a time so you can simply delete the DataNavigator. Notice how deleting the DataNavigator has no affect on the databinding. Since the controls are created, databound, labeled, and named, all you have to do is move the controls around to your own specific tastes.
Now let's expose a way to set which order the form will display. Within the order form, double click to go to code view. We'll expose a public property that will represent the Order object of the form. In the Setter, we'll also set the OrderDataConnector to the specific Order.
Private _order As Business.Order
Public Property Order() As Business.Order
Set(ByVal value As Business.Order)
_order = value
Me.OrderDataConnector.DataSource = _order
Notice how the DataConnector.DataSource
can work with different types of values. The following are all valid:
DataConnector.DataSource = _
DataConnector.DataSource = _
New BindingList(Of Business.Order)
DataConnector.DataSource = New Business.Order()
The first line sets the "shape" of the DataConnector. Internally the DataConnector maintains a BindingList(Of T)
. The second line tells the DataConnector to use this new list as its internal BindingList(Of T)
. The third line tells the DataConnector to use its internal list but set the shape to that of the item being added.
Go back to Form1. You want to capture the selected item and pass it to the OrderForm
. Since you know the OrdersDataConnector manages list of bindings for the Order you can leverage its Current
property. Then you'll want to pass it to the OrdersForm
. In the DoubleClick
event of the OrdersDataGridView, add the following code:
Linked Forms in Action
My.Forms.OrderForm.Order = _
Press F5 to see how this all works. Form1
is now loaded with the two customers. Navigating through the two customers in the DataGridView or the DataNavigator you'll see the individual controls and the OrdersDataGridView automatically refresh. You can then double-click one of the orders and open the OrderForm
displays the order with the Customer sub-object. By switching back to Form1
and double-clicking another order, the same OrderForm
The new features of Visual studio 2005 continue to enable developers to focus on the business code they need to write. Having to manually create labels, name controls, and bind them is a tedious, time-consuming step that adds little value to your end product. You've seen how Microsoft is opening the doors that limit the design patterns required to support the designer features. You no longer need to add interfaces or inherit from FX base classes just to get designer support. Visual Studio 2005 continues to build on developer productivity. Please contact us with your feedback.
You can use the Data Sources Window for any "Client" project. This includes traditional exe projects including Windows Forms, Device Projects using the Compact Framework, and Word and Excel applications built with Visual Studio Tools for Office.