"Cannot change DataType of a column once it has data" error in Visual Studio 2005 DataSet Designer

I've got a DataSet in VisualStudio 2005. I need to change the datatype of a column in one of the datatables from System.Int32 to System.Decimal. When I try to change the datatype in the DataSet Designer I receive the following error:

Property value is not valid. Cannot change DataType of a column once it has data.

From my understanding, this should be changing the datatype in the schema for the DataSet. I don't see how there can be any data to cause this error.

Does any one have any ideas?

I get the same error but only for columns with its DefaultValue set to any value (except the default <DBNull>). So the way I got around this issue was:

  1. Column DefaultValue : Type in <DBNull>
  2. Save and reopen the dataset

Since filled Datatables do not entertain a change in the schema a workaround can be applied as follows:

  1. Make a new datatable

  2. Use datatable's Clone method to create the datatable with the same structure and make changes to that column

  3. In the end use datatable's ImportRow method to populate it with data.

HTH

I have found a work around. If I delete the data column and add it back with the different data type, then it will work.

For those finding this via Google and you have a slightly different case where your table has got data and you add a new column (like me), if you create the column and set the datatype in separate statements you also get this same exception. However, if you do it in the same statement, it works fine.

So, instead of this:

var column = myTable.Columns.Add("Column1");
column.DataType = typeof(int); //nope, exception!

Do this:

var column = myTable.Columns.Add("Column1", typeof(int));

Comments
  • This works, but something should be noted: there is a validation done at the time you save and close. If there is a problem then the fields are simply deleted when you close the dataset. I found this out the hard way as I lost a lot of information I entered. To prevent loss, be sure the dataset saves without errors BEFORE you try to close it.
  • lol you really have to save and close then open for this to work, thanks life saver
  • Thanks, this works :). "Save and reopen" DataSet is must for this to work.
  • I have run into the same problem. Strange - can't change it in the designer. Looks like a bug...
  • Same bug is still in VS2010. Same solution works. Remove the default values, save and close the DS, then re-open and you can edit the data types.