Let's Try It!
If you haven't already done so, set the TestBed project to be the startup project. Now run the program. The DataGrid should populate with the contents of the Northwind Customer table. Try clicking the navigation buttons . The pointer should move accordingly and the caption should update with Record: n of x ( assuming the autoText property is set to True). Notice there is no user -supplied code in the test form. All of this functionality comes from the navigator control (see Figure 11.6).
Figure 11.6. The running test harness.
Click on the Selector column of the grid and move the pointer that way. Oops! The record counter does not get updated. The VB 6 Data Control had the same problem. The control has no way of knowing that you changed the position in the grid. The grid does notify its parent form through the CurrentCellChanged event. We can use this event to notify the navigator control that the user clicked a new row in the grid. As it turns out, the binding context position does change, but the binding context does not notify the form of this. I think there still needs to be some work done to ADO .NET in the next release. So if you add the following code to the DataGrid's CurrentCellChanged event, the caption will update properly:
Private Sub DataGrid1_CurrentCellChanged(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles DataGrid1.CurrentCellChanged UcDataNav1.Text = "Record: " & _ Me.BindingContext(UcDataNav1).Position + 1 & _ " of " & UcDataNav1.DataTable.Rows.Count End Sub
Now if you run the project you will see the caption change when you click on the grid directly. This is great but let's try something else. Try changing something in the grid. Now close the form and run the project again. The value reverted to its old value! Do you remember that we said ADO .NET DataSets are disconnected? When we updated the grid, we changed the data in the underlying DataTable, but we did nothing to change the data in the database itself. Unlike the old ADO Data Control, we will have to add more functionality to make this happen.