Reputation: 143
I have a form with two data-bound text boxes, one data-bound DateTimePicker and a BindingNavigator. I bind these components at run-time to the relevant data sources (the 'Text' and 'Value' of the Text Boxes and DateTimePicker respectfully are bound the relevant fields in a data set). All the components display the present records correctly. Normally, when one clicks the "Add New Item" button on the navigator, all the Text Boxes will clear in preparation for the new entry. However, I have the problem that this does not occur when the DateTimePicker is bound, and furthermore any attempts to update the datasets do not occur correctly. If I neglect to bind the DateTimePicker then all works as expected. What is the cause of this behaviour and is there a way around it?
Upvotes: 0
Views: 1153
Reputation: 502
This problem was resolved for my scenario by simply controlling the addrow method of the binding source based on this site: http://www.vbforums.com/showthread.php?645401-RESOLVED-datetimepicker-with-binding-source
Add a new button on the binding navigator (to use as your 'Add') and remove the old one.
Connect to the click event and set the datetime of the new row being added:
DataRowView row = (DataRowView)bs_.AddNew();
row["dbDateTime"] = DateTime.Now;
where dbDateTime is your database field.
Although you may have to add some more code to the click event, such as moving to the newly added row on the datagrid, this option was by far the easiest to implement.
Upvotes: 0
Reputation: 54417
The DateTimePicker doesn't support binding to nullable data. When you add a new row, the value for that field will be DBNull.Value by default and that cannot be converted successfully to a value that can be assigned to the Value property of the DateTimePicker, which is type DateTime. You need to either extend the DateTimePicker and add a new property that supports both DateTime values and DBNull objects and bind that or else set the DefaultValue property of your DataColumn so that there will always be a DateTime to display in the DateTimePicker.
Upvotes: 2