«Невозможно изменить тип DataType столбца после его получения» в Visual Studio 2005 DataSet Designer

Вопрос:У меня есть DataSet в VisualStudio 2005. Мне нужно изменить тип данных столбца в одном из данных datatables от System.Int32 до System.Decimal. Когда я пытаюсь изменить тип данных в DataSet Designer, я получаю следующую ошибку: Значение свойства недействительно. Невозможно изменить тип данных столбца один раз он имеет данные. По моему мнению, это должно изменить тип

Вопрос:

У меня есть 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
Оцените статью
Добавить комментарий