Makale Özeti

Son dönemde XML konusuna çok ağırlık verdik ve bu yazımız ile de XML datayı nasıl pratik bir şekilde datagrid üzerinde gösteririz, nasıl , edit ve metodlarını yine datagrid üzerinde çalıştırırız ve nasıl yeni kayıt ekleriz konusu üzerinde duracağım. Yani kısaca XML dataları artık sadece okuyup yazmaktan düzenleme ve yapısal görünüme sokma aşamasına geçiyoruz.

Makale

XML Datayı DataGridde Düzenlemek

Son dönemde XML konusuna çok ağırlık verdik ve bu yazımız ile de XML datayı nasıl pratik bir şekilde datagrid üzerinde gösteririz, nasıl update, edit ve delete metodlarını yine datagrid üzerinde çalıştırırız ve nasıl yeni kayıt ekleriz konusu üzerinde duracağım. Yani kısaca XML dataları artık sadece okuyup yazmaktan düzenleme ve yapısal görünüme sokma aşamasına geçiyoruz.

Yapacağımız klasik bir DataGrid çalışması. İlk etapta herhangi bir XML dosyamız ve dolayısıyla kaydımız olmayacak ve biz öncelikle XML dosyamızı yaratıp DataGrid ile ekrana getireceğiz. Daha sonrası ise tamamen düzenleme, silme ve yeni kayıt ekleme olayları.

Burada XML Dataya direk bir kaynaktan geliyormuşcasına hitap edeceğimizden System.XML NameSpace ini projeme eklemeden yapmaya çalışacağım. Ancak bir veri kaynağına bağlanmam gerektiği ve datagrid kullanacak olmam sebebi ile System.OleDb ve System.Data NameSpace lerini projeme dahil ediyorum.

Sayfamızın ilk çalıştırılması esnasında öncelikle oluşturulmuş bir XML veri kaynağı varmı bunu kontrol ediyoruz; var ise Page_Load olayında bu dokumanı yüklettiriyoruz,yok ise yeni bir XML dokuman oluşturuyoruz:

sub Page_Load(sender as Object, E as EventArgs)
   If NOT IsPostBack Then
      LoadXML
   End if
End sub


sub LoadXML
   Dim objdata as New DataSet

   Try
      objdata.ReadXML(Server.Mappath("sample.xml"))
      datagrid1.Datasource=objdata
      datagrid1.Databind()

   Catch

      CreateXML

   End Try
End sub


Sub CreateXML
   Dim objdata as New DataSet("root")
   Dim dt as New DataTable("record")
   Dim dr as DataRow

   dt.Columns.Add(New DataColumn("aid"))
   dt.Columns.Add(New DataColumn("name"))
   dt.Columns.Add(New DataColumn("dept"))
   dt.Columns.Add(New DataColumn("salary"))

   dr=dt.NewRow()
   dr(0)="1"
   dr(1)="Kayit Yok"
   dr(2)="Kayit Yok"
   dr(3)="Kayit Yok"

   dt.Rows.Add(dr)

   objdata.Tables.Add(dt)

   datagrid1.datasource=objdata
   datagrid1.databind()

   objdata.WriteXML(Server.mappath("sample.xml"))

   LoadXML()
End Sub

Şimdi ise Ekleme, Güncelleme ve Silme yapacağımız ekran ve kodların tasarımına geldi.

Düzenleme Modu :

Sub setEditMode(Sender as Object, E as DataGridCommandEventArgs)

   Dim objdata as New DataSet
   Dim x1 as string

   objdata.ReadXML(Server.Mappath("sample.xml"))

   x1=datagrid1.DataKeys.Item(e.Item.ItemIndex)

   objdata.Tables("record").DefaultView.RowFilter="aid=" & x1 & ""

   If objdata.Tables("record").DefaultView.Count>0 Then
      error4.visible="False"
      datagrid1.EditItemIndex=E.Item.ItemIndex
      datagrid1.showfooter="false"
      LoadXML
   Else
      error4.visible="True"
   End If
End sub


Sub cancelEdit(sender as Object, E as DataGridCommandEventArgs)
   datagrid1.EditItemIndex=-1
   datagrid1.showfooter="true"
   error1.visible="False"
   error2.visible="False"
   error3.visible="False"
   error4.visible="False"
   error5.visible="False"

   LoadXML

End sub

Silme Modu:

Sub DelXML(S as Object, E as DataGridCommandEventArgs)
   If e.CommandName="Delete" Then
      If datagrid1.EditItemIndex=-1 Then
         error5.visible="False"
         Dim x1 as string

         x1=datagrid1.DataKeys.Item(e.Item.ItemIndex)

         Dim objdata as New DataSet
         Try
            objdata.ReadXML(Server.Mappath("sample.xml"))
            objdata.Tables("record").DefaultView.RowFilter="aid=" & x1 & ""
            If objdata.Tables("record").DefaultView.Count>0 Then
               objdata.Tables("record").DefaultView.Delete(0)
            End If

            objdata.Tables("record").DefaultView.RowFilter=""

            objdata.WriteXML(Server.mappath("sample.xml"))
         Catch
            CreateXML
         End Try

         LoadXML
      Else
         error5.visible="True"
      End If
   End if
End Sub

Güncelleme Modu:

Sub UpdateXML(s as Object, e as DataGridCommandEventArgs)
   If e.CommandName="Update" Then
      Dim str1, str2, str3,v1 as string
      Dim txt1,txt2,txt3 as Textbox
      Dim objdata as New DataSet
      Dim x1 as string

      objdata.ReadXML(Server.Mappath("sample.xml"))

      v1=e.Item.ItemIndex

      x1=datagrid1.DataKeys.Item(e.Item.ItemIndex)

      objdata.Tables("record").DefaultView.RowFilter="aid=" & x1 & ""

      If objdata.Tables("record").DefaultView.Count>0 Then
         error3.visible="False"

         txt1=e.Item.FindControl("name_edit")
         txt2=e.Item.FindControl("dept_edit")
         txt3=e.Item.FindControl("sal_edit")

         objdata.Tables("record").Rows(v1).Item("name")=txt1.Text
         objdata.Tables("record").Rows(v1).Item("dept")=txt2.Text
         objdata.Tables("record").Rows(v1).Item("salary")=txt3.Text
         datagrid1.datasource=objdata
         datagrid1.databind()

         objdata.WriteXML(Server.mappath("sample.xml"))

         datagrid1.EditItemIndex=-1
         LoadXML
         datagrid1.showfooter="true"
      Else
         error3.visible="True"
      End If
   End If
End sub

Yeni Kayıt Ekleme Modu:

Sub doInsert(s as Object, E as DataGridCommandEventArgs)

   if e.CommandName="doAdd" Then
      Dim v1 as string
      Dim tadd1,tadd2,tadd3,tadd4 as Textbox
      Dim objdata as New DataSet
      Dim dr as DataRow

      objdata.ReadXML(Server.Mappath("sample.xml"))

      tadd1=e.Item.FindControl("aid_add")
      tadd2=e.Item.FindControl("name_add")
      tadd3=e.Item.FindControl("dept_add")
      tadd4=e.Item.FindControl("sal_add")

      Try
         tadd1.text=int32.parse(tadd1.text)
         error2.visible="false"

         If tadd1.text<1 Then
            tadd1.Text=""
            error2.visible="true"
         End If
      Catch
         tadd1.text=""
         error2.visible="true"
      End Try

      If tadd1.Text<>"" and tadd2.Text<>"" and tadd3.Text<>"" and tadd4.Text<>"" Then
         objdata.Tables("record").DefaultView.RowFilter="aid=" & tadd1.Text & ""
         If objdata.Tables("record").DefaultView.Count<=0 Then
            error1.visible="False"
            objdata.Tables("record").DefaultView.RowFilter=""
            dr=objdata.Tables("record").NewRow()

            dr(0)=tadd1.Text
            dr(1)=tadd2.Text
            dr(2)=tadd3.Text
            dr(3)=tadd4.Text
            objdata.Tables("record").Rows.Add(dr)

            objdata.WriteXML(Server.mappath("sample.xml"))
            LoadXML
         Else
            error1.visible="True"
            error1.Text="Tekil Olmalı"
         End If
      End If
   End If
End Sub

Ve bu yazımız için hazırladığımız küçük programcığın ekran çıktısı



XML Datanın pratikçe düzenlenmesi konusundaki örneği indirmek için tıklayınız.

Evren AYAN
www.evrenayan.net
www.maxiasp.net