Xml dosya yapısı, veri saklamak için uygun olduğu için ufak çapta projeler için xml teknolojisi vazgeçilmez oluyor. Gelin birlikte windows form ile xml dosyasına takla attıralım…
Windows form ile yapacağımız örnek uygulamada Xml dosyasına veri kayıt etme, güncelleme, silme gibi işlemlerin yanında kontrolleri kullanarak işlemleri yaptıralım. Örneğimizde; xml dosyası oluşturup dosya içine kayıt id numarası otomatik artacak şekilde veri kayıt etme, kayıt ettiğimiz verileri listview kontrolünde gösterme, kayıt edilip listelenen verileri güncelleme ve kayıt edilmiş seçilen veriyi silme işlemi yapılacak. Bunun yanında xml dosyasından combobox kontrolüne veri çekip, bu kontrolde seçilen elemana ilişkili olan verileri listview kontrolünde gösterecek.
[viral-lock][wpdm_file id=23][/viral-lock]
Resimdeki gibi bir form ekranı tasarlayıp aşağıda açıklamanı kod kısmına geçebilirsiniz;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 | private void Form1_Load(object sender, EventArgs e) { if (!File.Exists("xmldosyam.xml")) // Daha önceden dosyanın var olduğunu kontrol ettik. Dosya yoksa .xml uzantılı xmldosyam adında dosya oluşturma işlemine başladık. { XmlTextWriter xmlolustur = new XmlTextWriter("xmldosyam.xml", null); // XmlTextWriter sınıfından oluşturacağımız dosya özellikleri için nesne oluşturduk. xmlolustur.WriteStartDocument(); xmlolustur.WriteComment("Oluşturulan xml hakkında bilgi"); // Dosya hakkında bilgi ekledik. xmlolustur.WriteStartElement("Baslangic"); // Başlangıç elementi gibi özellikleri ekledik. xmlolustur.WriteEndDocument(); xmlolustur.Close(); } //xml dosyasında veri varsa başlangıçta çekiyoruz listele(); } private void listele() { if (File.Exists("xmldosyam.xml")) { listView1.Items.Clear(); XmlDocument doc = new XmlDocument(); doc.Load("xmldosyam.xml"); XmlElement root = doc.DocumentElement; XmlNodeList kayitlar = root.SelectNodes("/Baslangic/Kisiler"); foreach (XmlNode secilen in kayitlar) { ListViewItem lv = new ListViewItem(); lv.Text = secilen["id"].InnerText; lv.SubItems.Add(secilen["adi"].InnerText); lv.SubItems.Add(secilen["soyadi"].InnerText); lv.SubItems.Add(secilen["sehir"].InnerText); listView1.Items.Add(lv); // combobox içine xml dosya içindeki şehileri ekliyoruz. // Fakat burada aynı şehirden birden fazla olmaması için indexof özelliğinden yararlanarak combobox içine benzersiz eleman eklemiş oluyoruz. if (comboBox1.Items.IndexOf(secilen["sehir"].InnerText) == -1) { comboBox1.Items.Add(secilen["sehir"].InnerText); } } } } private void btnKaydet_Click(object sender, EventArgs e) { bool varmi = false; int enBuyukId; XmlDocument doc = new XmlDocument(); // Xml dosyamızı okumak için XmlDocument sınıfından yararlanıyoruz. doc.Load("xmldosyam.xml"); XmlElement root = doc.DocumentElement; XmlNodeList kayitlar = root.SelectNodes("/Baslangic/Kisiler"); // Xml içindeki istediğimiz kayıtlara ulaşabilmek için yolu tanımlıyoruz. Bunu veritabanı içindeki // tablo olarak düşünebilirsiniz. Bu yol ile Kullanicilar tablosuna yani listesine ulaşıp kayıtları XmlNodeList sınıfından oluşturduğumuz kayitlar isimli if (kayitlar.Count > 0) // Her yeni kayıta otomatik farklı id numarası verebilmek için bir önceki kayıtın id numarasına göre işlem yapmamız gerekecek. Burada ilk kayıt varmı kontrol ediyoruz. Varsa, kayıtlar içinde en büyük idyi yani numarayı bulup üzerine 1 ekletip yeni kayıt için hazırlıyoruz. Yoksa, daha önce kayıt oluşturulmamışsa ilk kayıt numarasını 0 atayıp kayıt için gönderiyoruz. { varmi = true; } if (varmi == true) { int[] kayittakiSayilar = new int[kayitlar.Count]; // Kayıt sayısı kadar dizi tanımaldık. int i = 0; // Diziyi arttırmak için sayı tanımladık. foreach (XmlNode secilen in kayitlar) { kayittakiSayilar[i] = Convert.ToInt32(secilen["id"].InnerText); // Kayıtlardaki tüm id yani numaraları kayittakiSayilar dizisi içine ekledik. i = i + 1; } Array.Sort(kayittakiSayilar); // kayittakiSayilar dizisi içinde bulunan sayılardan en büyüğünü bulabilmek için Array sınıfını kullandık. Bulunan en büyük sayıya 1 ekledik. enBuyukId = kayittakiSayilar[kayittakiSayilar.Length - 1]; enBuyukId = enBuyukId + 1; } else { enBuyukId = 0; } if (File.Exists("xmldosyam.xml")) // Xml dosyamıza kayıt eklemede hata almamak için dosyanın var olup olmadığını kontrol ediyoruz. { XmlElement UserElement = doc.CreateElement("Kisiler"); // Veritabanından tablo ismi gibi düşünbebilirsiniz. XmlElement id = doc.CreateElement("id"); //Oluşturulan xml içindeki Kullanicilar elementine id isimli element (DB deki gibi düşünürsek Kullanicilar tablosuna id kolonunu ekliyoruz.) id.InnerText = enBuyukId.ToString(); UserElement.AppendChild(id); XmlElement adi = doc.CreateElement("adi"); // İkinci elementi ekliyoruz.(Yani ikinci kolonu) adi.InnerText = txtAdi.Text; UserElement.AppendChild(adi); XmlElement soyadi = doc.CreateElement("soyadi"); soyadi.InnerText = txtSoyAdi.Text; UserElement.AppendChild(soyadi); XmlElement sehir = doc.CreateElement("sehir"); sehir.InnerText = txtSehir.Text; UserElement.AppendChild(sehir); doc.DocumentElement.AppendChild(UserElement); XmlTextWriter xmleekle = new XmlTextWriter("xmldosyam.xml", null); xmleekle.Formatting = Formatting.Indented; doc.WriteContentTo(xmleekle); xmleekle.Close(); } listele(); } string id = null; private void listView1_SelectedIndexChanged(object sender, EventArgs e) { if (listView1.SelectedItems.Count > 0) { ListViewItem li = listView1.SelectedItems[0]; lblId.Text = li.SubItems[0].Text; txtAdi.Text = li.SubItems[1].Text; txtSoyAdi.Text = li.SubItems[2].Text; txtSehir.Text = li.SubItems[3].Text; id = li.SubItems[0].Text; } } private void btnSil_Click(object sender, EventArgs e) { try { XDocument xDoc = XDocument.Load("xmldosyam.xml"); XElement deletedElement = xDoc.Root.Elements().FirstOrDefault(xe => xe.Element("id").Value == id); deletedElement.Remove(); xDoc.Save("xmldosyam.xml"); //listeyi güncellemek için xmlden verileri listview1 çekiyoruz listele(); } catch (Exception) { MessageBox.Show("Silinecek eleman yok veya seçilmemiş."); } } private void btnGuncelle_Click(object sender, EventArgs e) { XDocument xDoc = XDocument.Load("xmldosyam.xml"); // gelen id ye göre güncelleme yapılmakta XElement currentElement = xDoc.Root.Elements().FirstOrDefault(xe => xe.Element("id").Value == id); // Guncellenecek verinin koşulu fazla ise, yani hem adı hemde sehiri koşulu sağlayan verilerin güncellemek istediğimizde aşağıdaki gibi kullanırız. // XElement currentElement = xDoc.Root.Elements().FirstOrDefault(xe => xe.Element("adi").Value =="ali" && xe.Element("sehir").Value == "istanbul"); currentElement.SetElementValue("adi", txtAdi.Text); currentElement.SetElementValue("soyadi", txtSoyAdi.Text); currentElement.SetElementValue("sehir", txtSehir.Text); xDoc.Save("xmldosyam.xml"); //listeyi güncellemek için xmlden verileri listview1 çekiyoruz listele(); } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { // combobox dan seçilen şehir e göre listeleme işlemi yapıyoruz. listView1.Items.Clear(); XmlDocument doc = new XmlDocument(); doc.Load("xmldosyam.xml"); XmlElement root = doc.DocumentElement; XmlNodeList kayitlar = root.SelectNodes("/Baslangic/Kisiler"); foreach (XmlNode secilen in kayitlar) { //seçilen şehri gösterebilmek için burada filtreliyoruz if (secilen["sehir"].InnerText == comboBox1.Text) { ListViewItem lv = new ListViewItem(); lv.Text = secilen["id"].InnerText; lv.SubItems.Add(secilen["adi"].InnerText); lv.SubItems.Add(secilen["soyadi"].InnerText); lv.SubItems.Add(secilen["sehir"].InnerText); listView1.Items.Add(lv); } } } |