Вопрос:
У меня есть DataSet в VisualStudio 2005. Мне нужно изменить тип данных столбца в одном из данных datatables от System.Int32 до System.Decimal. Когда я пытаюсь изменить тип данных в DataSet Designer, я получаю следующую ошибку:
Значение свойства недействительно. Невозможно изменить тип данных столбца один раз он имеет данные.
По моему мнению, это должно изменить тип данных в схеме для DataSet. Я не вижу, как могут быть какие-либо данные, чтобы вызвать эту ошибку.
Есть ли у кого-нибудь идеи?
Лучший ответ:
Я получаю ту же ошибку, но только для столбцов со значением DefaultValue для любого значения (кроме значения по умолчанию <DBNull>). Так что я столкнулся с этой проблемой:
- Столбец DefaultValue: введите <DBNull>
- Сохранить и снова открыть набор данных
Ответ №1
Так как заполненные Datatables не содержат изменения в схеме, обходное решение может применяться следующим образом:
-
Создайте новый datatable
-
Использовать метод clone datatable для создавать данные с такими же структуры и внести изменения в это Столбец
-
В конце используйте datatable ImportRow метод для заполнения его данными.
НТН
Ответ №2
Я нашел работу. Если я удалю столбец данных и добавлю его обратно с другим типом данных, он будет работать.
Ответ №3
Для тех, кто находит это через Google, и у вас есть немного другой случай, когда ваша таблица имеет данные, и вы добавляете новый столбец (например, я), если вы создаете столбец и устанавливаете тип данных в отдельных отчетах, вы также получаете это исключение. Однако, если вы делаете это в одном и том же заявлении, он отлично работает.
Итак, вместо этого:
var column = myTable.Columns.Add(«Column1»); column.DataType = typeof(int); //nope, exception!
Сделайте это:
var column = myTable.Columns.Add(«Column1», typeof(int)); Ответ №4
У меня была такая же ошибка, но я повторно использовал таблицу для отображения различных результатов запроса, используя myTable.Clear() и myTable.Columns.Clear() для очистки таблицы между запросами. Это меня действительно смутило, поскольку я не мог понять, как таблица может содержать данные, чтобы вызвать ошибку!
Решение Logan устранило проблему. Спасибо, сэр, вы спасли мое здравомыслие.
Ответ №5
- Закройте 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