KMRT BSRN

"Hiç kimsenin ilgisine ihtiyaç duymadığın gün olgunlaşırsın. Hiç kimseden beklentiye girmediğin gün yara almazsın. Ve hiç kimseye bağımlı kalmazsan kazanırsın." OSHO

ASP .NET – TreeView Hiyerarşisi Oluşturma ve XML Kaydetme

1 Yorum


Bir ASP.NET web projesi açalım..

Default form üzerine bir adet TreeView , bir adet TextBox , bir adet Button , bir adet XmlDataSource ve iki adet Label koyalım..

Yapı şöyle olsun..


Projemize bir tane XML File ekleyelim.. İsmini “yapi.xml” verelim.. Sonra XmlDataSource’un Configuration özelliğinden bu xml dosyaya bağlayalım.. TreeView’ın DataSource’unuda XmlDataSource’a bağlayalım..

Böylece hiyerarşi şu olacak..

TreeView – XmlDataSource – yapi.xml

yapi.xml dosyasını açalım ve ordaki ilk satırın altına bir root element ekleyelim..


Şimdi Butona tıklanınca yapılacak işlemi yazalım..

Açıklama satırları ile kodlar…………….

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

///
/// Hiyerarşik olarak element’leri inşaa edecek ve kendi içinde kendi çağırarak bu işi yapacak olan void.
///
///

XML dosyaya yazım işlemi yapan XmlTextWriter.
/// Eklenecek ve ChildNode’ları incelenecek TreeNode.

private void xmlWriteChildElement(XmlTextWriter xtw, TreeNode tn)
{

//TreeView’daki childNode’ların hiyerarşik şekilde XML dökümanına inşaası..
foreach (TreeNode t in tn.ChildNodes)
{

//O anki childNode için element başlat.
xtw.WriteStartElement(t.Text, “”);

//Eğer o an ki childNode , childNode’lara sahip ise void kendini tekrar çağırır..
//Verilen parametrelerdeki TreeNode, o an ki childNode’dır..
if (tn.ChildNodes.Count > 0)
{
xmlHiyerarsi(xtw, t);
}

//O anki childNode için element bitir.
xtw.WriteEndElement();
}
}

///
/// Oluşturulan TreeView Hiyerarşisinin XML dosyasına kaydedilmesi..
///
private void SaveXML()
{

//XML dosyaya Text yazacak nesnenin dosyaya bağlanması..
XmlTextWriter wt = new XmlTextWriter(Server.MapPath(“yapi.xml”), System.Text.Encoding.GetEncoding(“iso-8859-9”));
//XML dosya hiyerarşisinin boşluklarla oluşturulması..
wt.Formatting = Formatting.Indented;

//XML dökümanına yazım işleminin başlaması..
wt.WriteStartDocument();

//TreeView’daki root node’ın ‘ın tüm alt Node’ları..
foreach (TreeNode t in this.TreeView1.Nodes)
{

//Her node için XML dosyada bir Element başlat..
wt.WriteStartElement(t.Text, “”);

//Eğer o an ki node childNode’a sahip ise..
if (t.ChildNodes.Count > 0)
{

//Kendi kendini çağırabilecek bir void ile hiyerarşinin oluşturulması..
this.xmlWriteChildElement(wt, t);
}

//O anki elementin kapatılması..
wt.WriteEndElement();
}

//Dökümanın sonlandırılması..
wt.WriteEndDocument();
//Döküman dosyasının kapatılması..
wt.Close();
}

///
/// Seçilen kategoriye TreeNode’ın eklenmesi..
///
///

Eklenecek TreeNode ‘ın Text’i.
private void KategoriEkle(string kIsimi)
{
TreeNode tn = new TreeNode(kIsimi);
this.TreeView1.SelectedNode.ChildNodes.Add(tn);
}

///
/// XML dosyasına eklenecek metinde hata oluşmasına sebep olacak karakterlerin silinmesi..
///
///

Kontrol edilecek metin.
/// Temiz metin.
private string Kontrol(string txt)
{

//
// XML metninde olmaması gereken karakterler..
//
char[] arChar ={ ‘!’, ‘?’, ‘@’, ”, ‘*’, ‘ ‘, ‘,’, ‘.’, ‘+’, ‘:’, ‘=’, ‘;’, ”, ‘^’, ‘~’, ‘$’, ‘&’, ‘[‘, ‘]’, ‘{‘, ‘}’, ‘#’, ‘/’, ‘\\’ };

int indexYasak;

//Yasak karakterlerden biri yazılan isimde oldukça dön..
do
{

//Yasak ifade index’ini bul..
indexYasak = txt.IndexOfAny(arChar);

//Yasak ifade varsa..
if (indexYasak != -1)
{

//Yasak ifadeyi sil..
txt = txt.Remove(indexYasak, 1);
}

} while (indexYasak != -1);

//Temiz metni döndür..
return txt;
}

protected void btnEkle_Click(object sender, EventArgs e)
{

//Eğer bir TreeNode’seçildiyse, o TreeNode’a ChildNode ekle..
if (this.TreeView1.SelectedNode != null)
{

//Kullanıcının verdiği ifadeyi XML dosyaya yazılacak hale çevir ve TreeView’a ekle..
this.KategoriEkle(this.Kontrol(this.TextBox1.Text));
//TreeView’ı XML dosyaya hiyerarşik biçimde yaz..
this.SaveXML();
}
else
{

//Eğer kategori eklemek için bir TreeNode seçilmediyse uyar..
lblUyari.Text = “Kategori eklemek için bir kategori seçiniz..”;
}
}
}

Hepsi bu kadar şimdi web sayfanızı çalıştırın ve seçtiğiniz kategoriye, Textbox’a bir isim girip, Ekle butonuna basarak kategori ekleyin.. Sonra sayfayı kapatın.. Visual Studio .NET ‘e geçince size yapi.xml dosyasında değişiklik olacağı için eklediğiniz kategoriler oraya yazıldığı için ve dosya içeriği değiştiği için , bu içerik değişikliğini uygulamak isteyip istemediğinizi soracaktır.. Yes diyerek sonuçlandırın ve gidip yapi.xml dosyasının içine bakın 🙂

Bu yapi.xml dosyasının içeriğini silerseniz mutlaka bir root yani başlangıç elementi bulundurun. Bizim yukarda yaptığımız kategori elementi gibi aksi taktirde ya kodunuza ona göre bir kaç değişiklik yapacaksınız yada hata ile karşılaşacaksınız..

Reklamlar

Yazar: K. Murat BAŞEREN, MBA, MCP

I am a senior software developer, MCP, consultant, blogger, former chemist and software trainer. My interests range from software developer to technology. I am also interested in web development, education, and coffee.

One thought on “ASP .NET – TreeView Hiyerarşisi Oluşturma ve XML Kaydetme

  1. The blog is helpfull…visit also < HREF="http://asp-net-example.blogspot.com" REL="nofollow"><>asp.net example<><>

    Beğen

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s