A probléma megoldásához először is állítsuk elő azt. Hozzunk létre tehát egy NameValueCollection típusú osztályt és helyezzünk el benne adatokat.
private NameValueCollection nvc = new NameValueCollection();
Adat hozzárendelése a NameValueCollection Add függvényével történhet. Első paraméterként a tárolandó adat nevét, míg másodikként a hozzá tartozó értékét kell megadnunk. Ezt követően meghívjuk belső ShowList nevű függvényünket abból a célból, hogy megjelenítsük a NameValueCollection-ban aktuálisan tárolt adatokat.
private void button1_Click(object sender, System.EventArgs e)
{
nvc.Add(textBox1.Text, textBox2.Text);
ShowList();
...
}
A ShowList egy ciklus segítségével az első elemtől az utolsóig végigmegy és kiírja mind a nevet, mind a hozzá tartozó adatot egy ListBox-ba. A nevet a NameValueCollection GetKey függvénye adja, paraméterként az adott kulcs sorszámát adjuk meg. Az aktuális érték pedig az osztály indexelőjén keresztül érhető el.
private void ShowList()
{
listBox1.Items.Clear();
for (int i=0; i<nvc.Count; i++)
{
listBox1.Items.Add(nvc.GetKey(i) + " = " + nvc[i]);
}
}
Most már adott egy a program futása alatt bármikor változtatható lista és így adott a probléma is: a program újraindításával elvész az addig tárolt értékek halmaza. Megoldásként és következő lépésként mentsük hát el az adatokat egy XML állományba. Ehhez szükségünk lesz egy XmlDocument osztály példányára és egy XmlNode típusú változóra is.
private void button2_Click(object sender, System.EventArgs e)
{
XmlDocument xd = new XmlDocument();
XmlNode xn;
Létrehozunk egy elemet a dokumentumban, mely annak típusát írja le és egy másikat, mely a fő csomópont lesz az XML állományon belül.
xd.AppendChild(xd.CreateDocumentType("SoftwareOnline", null, null, null));
xd.AppendChild(xd.CreateElement("NameValueCollection"));
Ezt követően egy ciklussal végigmegyünk az összes tárolt adaton és mindegyikhez egy új csomópontot hozunk létre azzal a névvel ami a megadott kulcs a listában, majd ehhez eltároljuk a hozzá tartozó értéket is. A ciklus végén már csak mentenünk kell az XmlDocument-ben létrehozott adathalmazt egy Xml állományba a Save függvény hívásával.
for (int i=0; i<nvc.Count; i++)
{
xn = xd.CreateNode("element", nvc.GetKey(i), null);
xn.InnerText = nvc[i];
xd.DocumentElement.AppendChild(xn);
}
xd.Save("_test.xml");
}
Az így létrejött XML állományba ha belenézünk, akkor valami hasonlót kell látnunk:
<!DOCTYPE SoftwareOnline>
<NameValueCollection>
<Key0>1</Key0>
<Key1>199003697</Key1>
<Key2>63603518</Key2>
<Key3>1743857189</Key3>
</NameValueCollection>
Most már csak egy feladatunk maradt hátra: vissza is kell töltenünk XML-ből az adatokat a NameValueCollection listájába. Első lépésként ellenőrizzük a File osztály Exists függvényével, hogy az XML állományunk létezik-e. Ha igen, akkor ismét egy XmlDocument osztályt és annak Load függvényét használva betöltjük az állományt. Egy foreach ciklus segítségével végigmegyünk az összes csomóponton, mely a NameValueCollection nevű csomóponton belül helyezkedik el és hozzáadjuk a NameValueCollection típusú listánkhoz. A ciklus végén nem marad más hátra, mint a lista tartalmának ismételt megjelenítése.
private void button4_Click(object sender, System.EventArgs e)
{
if (File.Exists("_test.xml"))
{
XmlDocument xd = new XmlDocument();
xd.Load("_test.xml");
foreach (XmlNode xn in xd["NameValueCollection"].ChildNodes)
{
nvc.Add(xn.Name, xn.InnerText);
}
ShowList();
}
}