2014-04-17 1 views
0

J'ai ajouté un objet DataSet fortement typé à mon projet. C'est le nom de type est DocRetrieverDataSet. J'ai également dans mes paramètres de projet une ligne pour une propriété DataSet user-scope nommée DocRetrieverDataSource à laquelle je veux enregistrer une instance de DocRetrieverDataSet.Enregistrement et chargement d'un DataSet fortement typé à partir des paramètres

Voici le code-down bouillie:

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; 
} 

La première fois que je lance, quand Settings.Default.DocRetrieverDataSource est null, il fonctionne très bien! Cependant, quand je lance la deuxième fois, je reçois un InvalidCastException à

this.myDocRetrieverDataSet = (DocRetrieverDataSet)Settings.Default.DocRetrieverDataSource; 

Il dit

Unable to cast object of type 'System.Data.DataSet' to type 'DocRetriever.DocRetrieverDataSet'. 

Le plus drôle est qu'il n'a pas ce problème, la première fois. Que se passe-t-il et comment puis-je le réparer?

PLUS D'INFO: Voici le code correspondant de 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; 
    } 
} 

Et de 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> 

Répondre

0

Vous devez changer le casting dans votre fichier de paramètres DataSet à votre 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; 
    } 
} 

Vous pouvez également le faire via le Designer Paramètres, il suffit d'aller à votre propriété et parcourir pour vous classe Setting designer

+0

Merci, je pense que je comprends ce que cela essaie de faire, mais ça ne fonctionne pas. Je vais inclure la section appropriée de Settings.Designer.cs et app.config afin que vous puissiez mieux me diriger vers ce que j'ai besoin de changer. (Je n'ai jamais touché app.config avant.) – user2320861

+0

Lorsque j'ai cliqué sur parcourir, je n'ai pas pu naviguer dans ma classe, alors j'ai essayé de taper 'DocRetriever.DocRetrieverDataSet' dans le champ de la zone de texte et cela a fonctionné! – user2320861

Questions connexes