"Невозможно изменить тип DataType столбца после его получения" в Visual Studio 2005 DataSet Designer
У меня есть DataSet в VisualStudio 2005. Мне нужно изменить тип данных столбца в одном из данных datatables от System.Int32
до System.Decimal
. Когда я пытаюсь изменить тип данных в DataSet Designer
, я получаю следующую ошибку:
Значение свойства недействительно. Невозможно изменить тип данных столбца один раз он имеет данные.
По моему мнению, это должно изменить тип данных в схеме для DataSet. Я не вижу, как могут быть какие-либо данные, чтобы вызвать эту ошибку.
Есть ли у кого-нибудь идеи?
Ответы
Ответ 1
Я получаю ту же ошибку, но только для столбцов со значением DefaultValue
для любого значения (кроме значения по умолчанию <DBNull>
). Так что я столкнулся с этой проблемой:
- Столбец DefaultValue: введите
<DBNull>
- Сохранить и снова открыть набор данных
Ответ 2
Так как заполненные Datatables не содержат изменения в схеме, обходное решение может применяться следующим образом:
НТН
Ответ 3
Я нашел работу. Если я удалю столбец данных и добавлю его обратно с другим типом данных, он будет работать.
Ответ 4
Для тех, кто находит это через Google, и у вас есть немного другой случай, когда ваша таблица имеет данные, и вы добавляете новый столбец (например, я), если вы создаете столбец и устанавливаете тип данных в отдельных отчетах, вы также получаете это исключение. Однако, если вы делаете это в одном и том же заявлении, он отлично работает.
Итак, вместо этого:
var column = myTable.Columns.Add("Column1");
column.DataType = typeof(int); //nope, exception!
Сделайте это:
var column = myTable.Columns.Add("Column1", typeof(int));
Ответ 5
У меня была такая же ошибка, но я повторно использовал таблицу для отображения различных результатов запроса, используя myTable.Clear() и myTable.Columns.Clear() для очистки таблицы между запросами. Это меня действительно смутило, поскольку я не мог понять, как таблица может содержать данные, чтобы вызвать ошибку!
Решение Logan устранило проблему. Спасибо, сэр, вы спасли мое здравомыслие.
Ответ 6
- Закройте DataSet в визуальном конструкторе
- Щелкните правой кнопкой мыши набор данных, выберите
Open With...
- Выберите
XML (Text) Editor
- Найдите столбец в XML, в вашем наборе данных он будет выглядеть примерно так:
<xs:element name="DataColumn1"
msprop:Generator_ColumnVarNameInTable="columnDataColumn1"
msprop:Generator_ColumnPropNameInRow="DataColumn1"
msprop:Generator_ColumnPropNameInTable="DataColumn1Column"
msprop:Generator_UserColumnName="DataColumn1"
type="xs:int"
minOccurs="0" />
- Измените
type="xs:int"
на type="xs:decimal"
- Сохраните и закройте редактор XML
- Возможно, вам придется снова щелкнуть правой кнопкой мыши по DataSet и выбрать
Run Custom Tool