【发布时间】:2011-10-25 15:07:55
【问题描述】:
我有一个 winforms 应用程序,它使用强类型自定义 DataSet 来保存数据以进行处理。它使用来自数据库的数据填充。
我有一个用户控件,它接受任何自定义数据集并在数据网格中显示内容。这用于测试和调试。为了使控件可重用,我将自定义数据集视为普通的 System.Data.DataSet。
我已扩展控件以允许将数据集保存到 XML 文件并加载以前保存的 XML 文件。
我现在要做的是获取加载的数据文件,它被视为标准数据集,并将其转换回自定义数据集。这应该不难,但我收到以下 System.InvalidCastException 消息:
无法将“System.Data.DataSet”类型的对象转换为类型 '成本数据集'。
这是问题代码的示例(它是生成异常的 3 行的最后一行):
DataSet selected = debugDisplay.SelectedDataSet;
CostingDataSet tempDS = new CostingDataSet();
tempDS = (CostingDataSet)selected.Copy();
谁能指导我如何解决这个问题?
编辑: 根据 nEM 的 cmets,我实现了这一点,一切都很好。
foreach (System.Data.DataTable basicDT in selected.Tables)
{
DataTable dt = tempDS.Tables[basicDT.TableName];
dt = basicDT.Copy();
}
另外,SSarma 推荐的代码也可以。
【问题讨论】:
-
我认为对于自定义对象,您需要在自定义对象类上使用可序列化属性...并提供序列化和反序列化构造函数。你在这样做吗?
-
@nEM 我使用 CustomTool "MSDATASETGENERATOR" 创建数据集后面的代码,这是可序列化的。在将自定义数据集传递给我的控件之前,它会被转换为标准数据集以进行显示。
-
其实我不认为标准的数据集可以转换为强类型数据集。您可能需要一个类来重新填充它。
标签: c# serialization deserialization strongly-typed-dataset