Hello,
I have a grid wiht a column where the Style = Integer. The property on the DataOsurce is int too, so everything should work fine.
At runtime, the grid displays the default value of zero. Then I edit it and set it to blank. When I tab out I get an error thrown by the grid "Object of type 'System.DBNull' cannot be converted to type 'System.Int32". I guess empty text is interpreted as DBNull.Value, which can not be converted to an Int32. I tried setting Nullable = Disallow, with no success.
Is there a way to not allow entering blank (null) values on a numeric column?
As a side note, I think the Nullable property should provide an option "TypeDefault". When selected, blank text should be converted to defaullt(T), where T is the data type of the column.
One more thing: I like the new design of the forums, but there is no forum-specific search (or I haven't found it?), only global. On a global search, only one page of results are displayed, there's no links to fetch more results.
What is the DataSource of your grid? Are you sure the data source itself supports null? Null is not a valid value for an Int. If you use a DataTable or UltraDataSource, then these handle nulls for you. But if you are using a custom data source with a property of type Int, then nothing the grid does will ever allow it to set an int to Null.
oscarmorasu said:One more thing: I like the new design of the forums, but there is no forum-specific search (or I haven't found it?), only global. On a global search, only one page of results are displayed, there's no links to fetch more results.
There's currently no forum-specific search, but I think they are working on adding it back in ASAP. :)
Magued:
Thanks for the sample code. I should have sent a sample code myself. On your example you bind the grid to a DataTable. In my case I bind the grid to a BindingSource. Then I set the BindingSource.DataSource to a List<Customer>, where Customer is a business object.
I'm attaching your original sample, modified to be closer to my scenario. I still get the error when setting the column to blank. One more thing, we are using version 8.2.20082.1000.
Mike:
I'm using a BindingSource, then I bind a collection of busniess obejcts to the grid. On the business object the property is of type int, so nulls or DBNulls are not allowed. I guess there's something going on in the BindingSource that interprets a blank value as a DBNull.
oscarmorasu said:I'm using a BindingSource, then I bind a collection of busniess obejcts to the grid. On the business object the property is of type int, so nulls or DBNulls are not allowed. I guess there's something going on in the BindingSource that interprets a blank value as a DBNull.
Yes, I'm sure that's the case. But even if it weren't, it still would not work. An Integer in DotNet cannot be blank, it has to have a value. You might need to change your property to a Nullable<Int> if you want the field to be able to accept nulls.
Another option would be to use a DataFilter and translate the blank or null into an integer value that you want to interpret as empty like maybe -1, 0, or Int32.MinValue.
Hello Mike,
I think there's a missunderstanding. The property in my business object is of type int. I don't want it to be nullable. I just don't want to get an error if the cell is blank and the user tabs out.
On the sample project I posted, change the ID to be blank. When you tab out there's an error.
The grid will never automatically convert a blank into a 0. It might convert a blank into a null or a DBNull (based on the Nullable property of the column). But never 0.
So if this is happening, it must the data source that is doing it.
In your case, though, since you are using a custom class, your data source cannot accept a null, since the field is an Int.
You can get around this in a number of ways. One way would be to allow your data source to accept nulls by changing the field to a nullable type. Then you could trap the setting and if someone tries to set the Value to null, return 0.
Another way handle this would be to use a DataFilter in the grid.
My whole point is that a blank value is throwing an error. I'm not sure who is throwing the error, but if the column Style is Interger and the user changes the text to blank, I would expect the value to revert back to 0.
On the previous reply Magues sent an example binding the grid to a DataSet. In that case a blank taxt is reverted back to 0. Then I posted an example using a BindingSource binded to a List of Business objects. In my example, when the text is blank the value is not reverted to 0, and I get the error instead.
Is that the expected behavior?
Thanks.
Okay, now I am really confused. :)
You cannot store a blank in an Int value. Blank is not a valid Int. So.. if you don't want an error, then what exactly do you want the behavior to be?
If you just want to prevent the error message from displaying, then you can do this in the CellDataError event of the grid. The event args allow you to cancel the default error message. I'm not entirely sure what happens to the Value of the cell at that point - it probably reverts to it's original value.