System.Configuration.ClientSettingsStore.WriteSettings C# (CSharp) Метод

WriteSettings() приватный Метод

private WriteSettings ( string sectionName, bool isRoaming, IDictionary newSettings ) : void
sectionName string
isRoaming bool
newSettings IDictionary
Результат void
        internal void WriteSettings(string sectionName, bool isRoaming, IDictionary newSettings) {
            if (!ConfigurationManagerInternalFactory.Instance.SupportsUserConfig) {
                throw new ConfigurationErrorsException(SR.GetString(SR.UserSettingsNotSupported));
            }

            Configuration config = GetUserConfig(isRoaming);
            ClientSettingsSection section = GetConfigSection(config, sectionName, true);

            if (section != null) {
                SettingElementCollection sec = section.Settings;
                foreach (DictionaryEntry entry in newSettings) {
                    SettingElement se = sec.Get((string) entry.Key);

                    if (se == null) {
                        se = new SettingElement();
                        se.Name = (string) entry.Key;
                        sec.Add(se);
                    }

                    StoredSetting ss = (StoredSetting) entry.Value;
                    se.SerializeAs = ss.SerializeAs;
                    se.Value.ValueXml = ss.Value;
                }

                try {
                    config.Save();
                }
                catch (ConfigurationErrorsException ex) {
                    // We wrap this in an exception with our error message and throw again.
                    throw new ConfigurationErrorsException(SR.GetString(SR.SettingsSaveFailed, ex.Message), ex);
                }
            }
            else {
                throw new ConfigurationErrorsException(SR.GetString(SR.SettingsSaveFailedNoSection));
            }
        }

Usage Example

Пример #1
0
        /// <summary>
        ///     Abstract SettingsProvider method
        /// </summary>
        public override void SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection values)
        {
            string      sectionName         = GetSectionName(context);
            IDictionary roamingUserSettings = new Hashtable();
            IDictionary localUserSettings   = new Hashtable();

            foreach (SettingsPropertyValue value in values)
            {
                SettingsProperty setting       = value.Property;
                bool             isUserSetting = IsUserSetting(setting);

                if (value.IsDirty)
                {
                    if (isUserSetting)
                    {
                        bool          isRoaming = IsRoamingSetting(setting);
                        StoredSetting ss        = new StoredSetting(setting.SerializeAs, SerializeToXmlElement(setting, value));

                        if (isRoaming)
                        {
                            roamingUserSettings[setting.Name] = ss;
                        }
                        else
                        {
                            localUserSettings[setting.Name] = ss;
                        }

                        value.IsDirty = false; //reset IsDirty
                    }
                    else
                    {
                        // This is an app-scoped or connection string setting that has been written to.
                        // We don't support saving these.
                    }
                }
            }

            // Semi-hack: If there are roamable settings, let's write them before local settings so if a handler
            // declaration is necessary, it goes in the roaming config file in preference to the local config file.
            if (roamingUserSettings.Count > 0)
            {
                ClientSettingsStore.WriteSettings(sectionName, true, roamingUserSettings);
            }

            if (localUserSettings.Count > 0)
            {
                ClientSettingsStore.WriteSettings(sectionName, false, localUserSettings);
            }
        }