Visual studio &引用;一旦列具有数据,则无法更改其数据类型";Visual Studio 2005数据集设计器中出现错误

Visual studio &引用;一旦列具有数据,则无法更改其数据类型";Visual Studio 2005数据集设计器中出现错误,visual-studio,dataset,.net-2.0,dataset-designer,Visual Studio,Dataset,.net 2.0,Dataset Designer,我在VisualStudio 2005中有一个数据集。我需要将其中一个数据表中列的数据类型从System.Int32更改为System.Decimal。当我尝试在数据集设计器中更改数据类型时,我收到以下错误: 属性值无效。无法一次性更改列的数据类型 它有数据 根据我的理解,这应该是更改数据集模式中的数据类型。我看不出有什么数据会导致这个错误 有人有什么想法吗?由于填充的数据表不考虑模式的更改,因此可以按如下方式应用解决方案: 创建一个新的数据表 使用datatable的克隆方法 使用相同的 结构

我在VisualStudio 2005中有一个数据集。我需要将其中一个数据表中列的数据类型从
System.Int32
更改为
System.Decimal
。当我尝试在
数据集设计器中更改数据类型时,我收到以下错误:

属性值无效。无法一次性更改列的数据类型 它有数据

根据我的理解,这应该是更改数据集模式中的数据类型。我看不出有什么数据会导致这个错误


有人有什么想法吗?

由于填充的数据表不考虑模式的更改,因此可以按如下方式应用解决方案:

  • 创建一个新的数据表

  • 使用datatable的克隆方法 使用相同的 结构并对其进行更改 纵队

  • 最后使用datatable的ImportRow 方法来用数据填充它


  • HTH

    我找到了一个解决办法。如果我删除数据列并使用不同的数据类型将其添加回,那么它将工作。

    我得到相同的错误,但仅适用于其
    默认值设置为任何值的列(默认值除外)。所以我解决这个问题的方法是:

  • 列默认值:键入
  • 保存并重新打开数据集

  • 对于那些通过Google发现这一点的人,你有一个稍微不同的情况,你的表有数据,你添加了一个新的列(像我一样),如果你创建列并在单独的语句中设置数据类型,你也会得到同样的异常。但是,如果您在同一语句中执行此操作,则效果良好

    因此,与此相反:

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

    var column = myTable.Columns.Add("Column1", typeof(int));
    
    • 在可视化设计器中关闭数据集
    • 右键单击数据集,选择
      openwith…
    • 选择
      XML(文本)编辑器
    • 在XML中找到该列,在数据集中它将类似于:
    
    
    • type=“xs:int”
      更改为
      type=“xs:decimal”
    • 保存并关闭XML编辑器
    • 您可能需要再次右键单击数据集并选择
      runcustomtool

    我遇到了同样的问题。奇怪-无法在设计器中更改它。看起来像个bug…同样的bug还在VS2010中。同样的解决方案也有效。删除默认值,保存并关闭DS,然后重新打开,您可以编辑数据类型。这是可行的,但需要注意的是:在保存和关闭时已完成验证。如果出现问题,则在关闭数据集时,只需删除字段。我很难发现这一点,因为我丢失了很多输入的信息。为防止丢失,请确保在尝试关闭数据集之前,数据集保存无误。lol您确实需要保存并关闭数据集,然后打开它才能工作,感谢life Saver银行,此功能:)。“保存并重新打开”数据集是此工作所必需的。
    <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" />