Создал свою секцию в файле конфигов, могу править значения в существующих строках, но не получается удалять и добавлять строки. Мой код:
Сам конфиг:
Файл с классом моей секции:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
namespace project
{
class CircuitsConfigSection : ConfigurationSection
{
[ConfigurationProperty( "Circuits" )]
public CircuitsCollection CircuitItems
{
get { return ((CircuitsCollection)(base["Circuits"])); }
set { base["Circuits"] = value; }
}
}
[ConfigurationCollection(typeof(CircuitElement))]
public class CircuitsCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new CircuitElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((CircuitElement)(element)).CircuitName;
}
public CircuitElement this[int idx]
{
get { return (CircuitElement)BaseGet(idx); }
}
}
public class CircuitElement : ConfigurationElement
{
[ConfigurationProperty("circuitName", DefaultValue = "", IsKey = true, IsRequired = true)]
public string CircuitName
{
get { return ((string)(base["circuitName"])); }
set { base["circuitName"] = value; }
}
[ConfigurationProperty("connectionStringOut", DefaultValue = "", IsKey = false, IsRequired = false)]
public string ConnectionStringOut
{
get { return ((string)(base["connectionStringOut"])); }
set { base["connectionStringOut"] = value; }
}
[ConfigurationProperty("connectionStringIn", DefaultValue = "", IsKey = false, IsRequired = false)]
public string ConnectionStringIn
{
get { return ((string)(base["connectionStringIn"])); }
set { base["connectionStringIn"] = value; }
}
}
}
Обработчик клика, где я обращаюсь к конфигу, пытаясь его изменить:
private void saveBtn_Click(object sender, EventArgs e)
{
Configuration cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
CircuitsConfigSection section = (CircuitsConfigSection)cfg.Sections["CircuitsSection"];
if (section != null)
{
for (int i = 0; i < circuitSettings.Count; i++)
{
section.CircuitItems[i].CircuitName = circuitSettings[i].Name;
section.CircuitItems[i].ConnectionStringOut = circuitSettings[i].GetConnString(true);
section.CircuitItems[i].ConnectionStringIn = circuitSettings[i].GetConnString(false);
}
cfg.Save();
ConfigurationManager.RefreshSection("CircuitsSection");
}
else System.Diagnostics.Debug.WriteLine("Секция не найдена");
this.Close();
}
Понятное дело, что если в circuitSettings хранится больше объектов, чем уже есть в конфиге (section.CircuitItems), то будет вылет за пределы диапазона в счетчике. Но беда в том, что нельзя задать что-то вроде
section.CircuitItems.add(new Item())
Как быть? Как задать больше или меньше существующих элементов? Или вообще отдельно сформированный список присвоить? Сейчас я не вижу доступных команд на изменение длинны списка ключей.
Ответ
Так добавьте нужный метод в CircuitsCollection
public void Add(CircuitElement element)
{
BaseAdd(element);
}
Комментариев нет:
Отправить комментарий