私は、社内のすべての顧客を管理するためのプログラムに取り組んでいます。XML ファイルを使用して顧客を保存したいと考えています。そこで、XML ファイルを (存在しない場合は) 作成し、要素を入力します。ここで私がどのように行うかを見ることができます:
string path = "C:\\Users\\Römel\\Desktop\\Save";
List<Kunde> kunde = new List<Kunde>();
private void Form1_Load(object sender, EventArgs e)
{
XmlDocument xdocument = new XmlDocument();
xdocument.Load(path + "\\save.xml");
foreach (XmlNode xnode in xdocument.SelectNodes("Kundenverwaltung/Kunde"))
{
Kunde k = new Kunde();
k.KundenNr = xnode.SelectSingleNode("KundenNr").InnerText;
k.Nachname = xnode.SelectSingleNode("Nachname").InnerText;
k.Vorname = xnode.SelectSingleNode("Vorname").InnerText;
k.Adresse = xnode.SelectSingleNode("Adresse").InnerText;
k.Ort = xnode.SelectSingleNode("Ort").InnerText;
k.Telefon = xnode.SelectSingleNode("Telefon").InnerText;
k.Mail = xnode.SelectSingleNode("Mail").InnerText;
kunde.Add(k);
listViewKunden.Items.Add(k.Nachname + " " + k.Vorname);
}
}
private void btnAddCustomer_Click(object sender, EventArgs e)
{
if(!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
if (!File.Exists(path + "\\save.xml"))
{
XmlTextWriter xwriter = new XmlTextWriter(path + "\\save.xml", Encoding.UTF8);
xwriter.WriteStartElement("Kundenverwaltung");
xwriter.WriteEndElement();
xwriter.Close();
}
Kunde k = new Kunde();
k.KundenNr = txtKundenNr.Text;
k.Nachname = txtKundeNachname.Text;
k.Vorname = txtKundeVorname.Text;
k.Adresse = txtKundeAdresse.Text;
k.Ort = txtKundeOrt.Text;
k.Telefon = txtKundeTel.Text;
k.Mail = txtKundeMail.Text;
kunde.Add(k);
listViewKunden.Items.Add(k.Nachname + " " + k.Vorname);
txtKundenNr.Text = "";
txtKundeNachname.Text = "";
txtKundeVorname.Text = "";
txtKundeAdresse.Text = "";
txtKundeOrt.Text = "";
txtKundeTel.Text = "";
txtKundeMail.Text = "";
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(path + "\\save.xml");
XmlNode xnode = xdoc.SelectSingleNode("Kundenverwaltung");
xnode.RemoveAll();
foreach (Kunde k in kunde)
{
XmlNode xtop = xdoc.CreateElement("Kunde");
XmlNode xkundennr = xdoc.CreateElement("KundenNr");
XmlNode xnachname = xdoc.CreateElement("Nachname");
XmlNode xvorname = xdoc.CreateElement("Vorname");
XmlNode xadresse = xdoc.CreateElement("Adresse");
XmlNode xort = xdoc.CreateElement("Ort");
XmlNode xtel = xdoc.CreateElement("Telefon");
XmlNode xmail = xdoc.CreateElement("Mail");
xkundennr.InnerText = k.KundenNr;
xnachname.InnerText = k.Vorname;
xvorname.InnerText = k.Nachname;
xadresse.InnerText = k.Adresse;
xort.InnerText = k.Ort;
xtel.InnerText = k.Telefon;
xmail.InnerText = k.Mail;
xtop.AppendChild(xkundennr);
xtop.AppendChild(xnachname);
xtop.AppendChild(xvorname);
xtop.AppendChild(xadresse);
xtop.AppendChild(xort);
xtop.AppendChild(xtel);
xtop.AppendChild(xmail);
xdoc.DocumentElement.AppendChild(xtop);
}
xdoc.Save(path + "\\save.xml");
e.Cancel = false;
this.Close();
}
などのためKundenNr
にNachname
、ファイルの最後にいくつかのクラスを作成しました。コードが多すぎないことを願っています。
まず、通常の右上の「×」ボタンを押しても反応がないので使えません。Exit
というわけでボタンを作りました。
2番目:プログラムを終了するために終了ボタンを押すたびに、次の行にエラーが発生します:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
xdoc.Load(path + "\\save.xml");
}
「ルート要素がありません」が出てきます。誰かがこのエラーを知っていて、私にヒントを与えることができますか?
編集:btnExit_Click
私はこのコードを使用します:
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}