Makale Özeti

Xml dosyası dinamik olarak veri ekliyoruz ve Bunu diğer bir form da gösteriyoruz.

Makale

Merhaba arkadaşlar ,

Bu makaleme başlamadan önce temel xml bilginiz olması gerekiyor.Ayrıca okurken kodla birlikte takip etmeniz gerekiyor.

İlk önce windows form dosyası açın ve iki buton ve üç tane textbox ekleyin.Bu form ayrıca bir form daha ekleyin->New item->Form2.cs

Form2.cs bir tane DataGridview atın.

 

Aşağıdaki bilgileri takip ederek okumayı unutmayın .Kodların açıklaması verilmiştir.Bildiklerinizi atlayabilirsiniz.

 

XmlDocument document = new XmlDocument();

Bu sınıf , "document" adında bir nesne yaratmıştır.Xml belgesini gösteriyor.Kodumuzun üst tarafına
using System.Xml; namespace'ini yerleştirmeliyiz.

document.Load(@"D:\\deneme.xml");

Bu metod , XmlDocument'in nesnesi oluşturlarak , . (nokta) operatörü ile ulaştık.
İçindeki string türündeki url parametresinden Xml belgesini yüklüyor.
Bu parametre , yüklemek için dosyanın bulunduğu yerin url'sidir.Ayrıca xml belgesi olacak.
Yukardaki local bir dosyadır.Http url de (web adresi de) olabilir.

document.CreateElement("kisi");

Bu metod da XmlDocument sınıfına aittir.Belirli isim ile bir element yaratıyor.

document.CreateTextNode(textBox1.Text);

Bu metod , Hangi element için yaratmışsak onun içine ait metindir.
Yukarıdaki kod , document.CreateElement("isim") yarattığımız "isim" elementinin içine XmlText yaratıyor.
Bu yazıya başlamadan önce xml temel bilginizin olması gerekir.

Kod çalıştırdığınızda daha iyi anlayacaksınız.

subRoot.AppendChild(appendedElementUsername);

XmlElement sınıfının nesnesi . (nokta) operatörü ile AppendChild(XmlElement) ulaşıyor.
Bu metod , çocuk(child) listesinin sonuna üsteki parametredeki node ekliyor.(XmlNode dan mirastır)
 
appendedElementUsername.AppendChild(xmlTextUserName);
XmlText türündeki parametre bilgisi belirtilen yere node'u eklemek için hareket ettirilir.(XmlNode dan mirastır)

document.DocumentElement.AppendChild(subRoot);

XmlDocument sınıfının nesnesi , DocumentElement özelliğine ulaşır.Bu belge (document) için
XmlElement kökünü (root) alıyor.Xml belgesi ağacının (Xml document tree) ın kökü(root) gösteriyor.
Eğer kök yoksa , null değerini geri döner.AppendChild metodu ile kökün kapanışını ekledik.

-------------------------------------------------------------------------------------------
FileStream dosya=new FileStream(string,FileMode,FileAccess)

Zaman uyumlu(scychronous) ve zaman uyumsuz(ascychronous) okuma ve yazma işlemlerini destekleyen ,
bir dosya çevresinde bir Stream sunar.

Parametre 1 String:dosya adındaki nesnemizin dizin yolunu(path) gösterir.
Parametre 2 FileMode:Bu bir sabittir.(constant)Dosya nasıl yaratmayı veya açmayı , karar veriyor.
Biz FileMode.Append kullandık.Dosya varsa açar(üzerine ekler) yoksa dosyayı yaratır.
Parametre 3 FileAccess:Bu da bir sabittir.(constant)Dosyaya nasıl erişilir , karar veriliyor.
Yani okuma mı yazmak mı?Ben FileAccess.Write yazmak için erişiyorum.

XmlTextWriter writer = new XmlTextWriter(dosya, null);

Bir yazıcı gösteriyor.Xml veri içeren dosyaların veya stream lerin ön belleğe alınmamış , salt ileri , hızlı olmasını sağlıyor.
XmlTextWriter(Stream , Encoding); Belirli stream ve encoding de örneğini(instance) yaratıyoruz.
Stream-> Yazmak istediğimiz akıştır.(stream)
Encoding->Biz null kullandık bu yüzden utf-8 kodlaması olarak stream i yazıyor.

writer.Formatting = Formatting.Indented;

writer.Formatting , Çıkış nasıl biçimlendirilir onu gösteriyor.Biz Indented seçeneğini seçtik.
Bunu kullanmayla element satırbaşı edilir.

writer.WriteStartDocument();

Yukarıdaki kod xml dosyası içine <?xml version="1.0"?> bu bildirimi yazıyor.

writer.WriteStartElement ve writer.WriteEndElement

WriteStartElement metodu(string) parametresi element in yerel(local) ismidir.Belirtilen isim ile bir başlangıç
etiketini yazıyor.
WriteEndElement() metodu elementi kapatır ve ilgili namespace kapsamı(scope) nı açığa çıkarıyor.
Eğer etiket (tag) içermiyorsa , "/>" işareti yazılır.

writer.WriteElementString(String,String)

Belirli yerel(local) isim ve değeri(içeriği veya veri) ile bir elemet yazıyor.(XmlWriter dan miras kalmış)

 

 

 

 

Şimdi Form1.cs kodumuzu ekleyelim

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Xml;
namespace printer_musteri_ekle
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            if (File.Exists(@"D:\\deneme.xml"))
            {
                XmlDocument document = new XmlDocument();
                document.Load(@"D:\\deneme.xml");
                XmlElement subRoot = document.CreateElement("kisi");
                //isim
                XmlElement appendedElementUsername = document.CreateElement("isim");
                XmlText xmlTextUserName = document.CreateTextNode(textBox1.Text);
                appendedElementUsername.AppendChild(xmlTextUserName);
                subRoot.AppendChild(appendedElementUsername);

                
                //adres
                XmlElement appendedElementAdres = document.CreateElement("adres");
                XmlText xmlTextAdres = document.CreateTextNode(textBox2.Text);
                appendedElementAdres.AppendChild(xmlTextAdres);
                subRoot.AppendChild(appendedElementAdres);

               

                //tlf
                XmlElement appendedElementtlf = document.CreateElement("tlf");
                XmlText xmlTexttlf = document.CreateTextNode(textBox3.Text);
                appendedElementtlf.AppendChild(xmlTexttlf);
                subRoot.AppendChild(appendedElementtlf);

                document.DocumentElement.AppendChild(subRoot);
                document.Save("D:\\deneme.xml");

            }
            else
            {
                FileStream dosya = new FileStream("D:\\deneme.xml", FileMode.Append, FileAccess.Write);

                XmlTextWriter writer = new XmlTextWriter(dosya, null);
                writer.Formatting = Formatting.Indented;

                writer.WriteStartDocument();
                writer.WriteStartElement("veri");
                writer.WriteStartElement("kisi");
                writer.WriteElementString("isim", textBox1.Text);
                writer.WriteElementString("adres", textBox2.Text);
                writer.WriteElementString("tlf", textBox3.Text);



                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteEndDocument();
                writer.Close();
            }

      

        }

        private void button2_Click(object sender, EventArgs e)
        {
            
            Form2 frm2 = new Form2();
            frm2.Show();
        }
    }
}

Şimde de Form2.cs kodumuzu ekleyelim.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace printer_musteri_ekle
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        DataSet ds = new DataSet();
        private void Form2_Load(object sender, EventArgs e)
        {
            ds.ReadXml("D:\\deneme.xml");
            dataGridView1.DataSource = ds.Tables[0];
        }
    }
}

 Kodlarımızı koydutan sonra ilk olarak form1 çalışacak textbox lara veri girdikten sonra button1 e basılacak veriler dosyamızı oluşturup eklenecek(Eğer dosya D diskinde yoksa oluşturur). Sonra button2 ye basarak form2 ye açılır ve datagridview da veriler gösterilir.Artık istediğiniz kadar veri ekleyin.

 

Herkese iyi çalşmalar