C# 从设置保存和加载强类型数据集

C# 从设置保存和加载强类型数据集,c#,strongly-typed-dataset,settings.settings,C#,Strongly Typed Dataset,Settings.settings,我在项目中添加了一个强类型数据集对象。它的类型名是DocRetrieverDataSet。 我的项目设置中还有一行用于名为DocRetrieverDataSource的用户范围数据集属性,我要将DocRetrieverDataSet的实例保存到该属性 下面是简要的代码: using Settings = MyProjectNameSpace.Properties.Settings; .... private DocRetrieverDataSet myDocRetrieverDataSet;

我在项目中添加了一个强类型数据集对象。它的类型名是
DocRetrieverDataSet
。 我的项目设置中还有一行用于名为DocRetrieverDataSource的用户范围数据集属性,我要将
DocRetrieverDataSet
的实例保存到该属性

下面是简要的代码:

using Settings = MyProjectNameSpace.Properties.Settings;
....
private DocRetrieverDataSet myDocRetrieverDataSet;

public myForm()
{
    Initialize();
    if (Settings.Default.DocRetrieverDataSource == null)
    {
        Settings.Default.DocRetrieverDataSource = new DocRetrieverDataSet();
        Settings.Default.Save();
    }
    this.myDocRetrieverDataSet = (DocRetrieverDataSet)Settings.Default.DocRetrieverDataSource;
}
第一次运行它时,当
Settings.Default.DocRetrieverDataSource
null
时,它工作正常!但是,当我第二次运行它时,在

this.myDocRetrieverDataSet = (DocRetrieverDataSet)Settings.Default.DocRetrieverDataSource;
上面说

Unable to cast object of type 'System.Data.DataSet' to type 'DocRetriever.DocRetrieverDataSet'.
有趣的是,它第一次没有这个问题。发生了什么事?我如何修复

更多信息: 以下是Settings.Designer.cs中的相关代码

[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public global::System.Data.DataSet DocRetrieverDataSource {
    get {
        return ((global::System.Data.DataSet)(this["DocRetrieverDataSource"]));
    }
    set {
        this["DocRetrieverDataSource"] = value;
    }
}
从app.config下载

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=abcdefghijkl" >
            <section name="DocRetriever.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=abcdefghijkl" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <DocRetriever.Properties.Settings>
            <setting name="SpoolDirectoryPath" serializeAs="String">
                <value />
            </setting>
            <setting name="OutputDirectoryPath" serializeAs="String">
                <value />
            </setting>
        </DocRetriever.Properties.Settings>
    </userSettings>
</configuration>

您需要将设置文件中的强制转换从DataSet更改为DocRetrieverDataSet

[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public global::System.Data.DataSet DocRetrieverDataSource {
    get {
        return ((global::FullNamespace.DocRetrieverDataSet)(this["DocRetrieverDataSource"]));
    }
    set {
        this["DocRetrieverDataSource"] = value;
    }
}

您也可以通过设置设计器进行设置,只需转到您的酒店并浏览您的课程即可

谢谢,我想我明白这是在做什么,但它不起作用。我将包括Settings.Designer.cs和app.config中的相关部分,以便您可以更好地向我指出需要更改的内容。(我以前从未接触过app.config。)当我单击“浏览”时,我无法浏览到我的类,因此我尝试在文本框字段中键入
DocRetriever.DocRetrieverDataSet
,它成功了!