GridView XML Veri Listeleme, Ekleme, Düzenleme ve Silme İşlemleri

Asp.Net ile ilgili epeydir yazı yazmıyordum, kısmet bugüneymiş. Başlıktan da anlaşılacağı üzere gridview kontrolü ile xml bir veriyi nasıl listeleyebilir, düzenleyebilir, silebilir ve yeni bir kayıt ekleyebileceğimize bakacağız. Bunun yanında gridview nesnesini css ile kolayca nasıl biçimlendirebildiğimizide göreceğiz. Lafı daha fazla uzatmadan konumuza dönelim. Aşşağıda xml verimizi görüyoruz.

    <?xml version="1.0" encoding="utf-8"?>
    <urunler>
      <urun>
        <kod>001</kod>
        <ad>Cep telefonu7</ad>
        <fiyat>1145</fiyat>
        <parabirimi>$</parabirimi>
      </urun>
      <urun>
        <kod>002</kod>
        <ad>Fotoğraf makinası</ad>
        <fiyat>250</fiyat>
        <parabirimi>TL</parabirimi>
      </urun>
    </urunler>

İlk önce projemize yeni bir gridview kontrolü ekleyip, onrowcancelingeditonrowdeleting, onrowediting, onrowupdating olaylarını(event) etkinleştiriyoruz. Sonrasında AutoGenerateColumns özelliğinide false olarak ayarlıyoruz. Bunun nedeni sütunları biz elle oluşturacağız, eğer sütunları direk almak istersek bu özellik true olarak kalabilir.
Birde unutmadan CssClass olarak da gridView değerini veriyoruz. Bunu gridview imizi biçimlendirirken kullanacağız. Bir sonraki adımımız xml verimizden gelecek olan veri alanlarını ve biçimlendirme için gerekli olan diğer tanımlamaları yapmak. Aşşağıda bu saydığım olayların yapılmış halini görebilirsiniz. Unutmadan birde yeni veri girişi için gerekli olan formumuz bulunuyor.

    <asp:GridView runat="server" ID="gvListe" CssClass="gridView"
        onrowcancelingedit="gvListe_RowCancelingEdit"
        onrowdeleting="gvListe_RowDeleting" onrowediting="gvListe_RowEditing"
        onrowupdating="gvListe_RowUpdating" AutoGenerateColumns="False">

        <HeaderStyle CssClass="baslik" />
        <RowStyle CssClass="satir" />
        <AlternatingRowStyle CssClass="aSatir"/>

        <Columns>
            <asp:TemplateField HeaderText="Kod">
                <EditItemTemplate>
                    <asp:TextBox ID="txtKod" runat="server" Text='<%# Bind("kod") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="lblKod" runat="server" Text='<%# Bind("kod") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Ad">
                <EditItemTemplate>
                    <asp:TextBox ID="txtAd" runat="server" Text='<%# Bind("ad") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="lblAd" runat="server" Text='<%# Bind("ad") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Fiyat">
                <EditItemTemplate>
                    <asp:TextBox ID="txtFiyat" runat="server" Text='<%# Bind("fiyat") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="lblFiyat" runat="server" Text='<%# Bind("fiyat") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Para Birimi">
                <EditItemTemplate>
                    <asp:TextBox ID="txtParaBirimi" runat="server" Text='<%# Bind("parabirimi") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="lblParaBirimi" runat="server" Text='<%# Bind("parabirimi") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:CommandField ShowEditButton="True" ShowDeleteButton="true" />
        </Columns>
    </asp:GridView>

    <div class="form">
        <h1>Yeni kayıt ekle !</h1>
        <span>Kod</span><asp:TextBox runat="server" ID="txtKod" />
        <span>Ad</span><asp:TextBox runat="server" ID="txtAd" />
        <span>Fiyat</span><asp:TextBox runat="server" ID="txtFiyat" />
        <span>Para Birimi</span><asp:TextBox runat="server" ID="txtParaBirimi" />

        <asp:Button runat="server" ID="btnEkle" Text="Ekle !" onclick="btnEkle_Click" />
    </div>

Geliyoruz ikinci aşamamıza nedir bu aşamalar ? Xml verisinin listelenmesi, düzenlenmesi ve silinmesi. Bu işlemler için gerekli olan kodlarımıza bakıyoruz.

public partial class _Default : System.Web.UI.Page
{
string strVeriYol;
XmlDocument xdDoc = new XmlDocument();
protected void Page_Load(object sender, EventArgs e)
{
strVeriYol = Server.MapPath("~/veri.xml");
if (!IsPostBack)
{
gvDoldur();
}
}

protected void gvDoldur() {
DataSet ds = new DataSet();
ds.ReadXml(strVeriYol);
gvListe.DataSource = ds.Tables[0];
gvListe.DataBind();
}

protected void gvListe_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
string strKod = ((Label)gvListe.Rows[e.RowIndex].Cells[0].FindControl("lblKod")).Text;
xdDoc.Load(strVeriYol);
XmlNode xnDuzenle = xdDoc.SelectSingleNode("/urunler/urun[kod='" + strKod + "']");
xnDuzenle.ParentNode.RemoveChild(xnDuzenle);
xdDoc.Save(strVeriYol);
gvListe.EditIndex = -1;
gvDoldur();
}
protected void gvListe_RowEditing(object sender, GridViewEditEventArgs e)
{
gvListe.EditIndex = e.NewEditIndex;
gvDoldur();
}
protected void gvListe_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gvListe.EditIndex = -1;
gvDoldur();
}
protected void gvListe_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string strKod = ((TextBox)gvListe.Rows[e.RowIndex].Cells[0].FindControl("txtKod")).Text;
string strAd = ((TextBox)gvListe.Rows[e.RowIndex].Cells[1].FindControl("txtAd")).Text;
string strFiyat = ((TextBox)gvListe.Rows[e.RowIndex].Cells[2].FindControl("txtFiyat")).Text;
string strParaBirimi = ((TextBox)gvListe.Rows[e.RowIndex].Cells[3].FindControl("txtParaBirimi")).Text;

xdDoc.Load(strVeriYol);
XmlNode xnDuzenle = xdDoc.SelectSingleNode("/urunler/urun[kod='"+strKod+"']");
if (xnDuzenle != null)
{
xnDuzenle["kod"].InnerText = strKod;
xnDuzenle["ad"].InnerText = strAd;
xnDuzenle["fiyat"].InnerText = strFiyat;
xnDuzenle["parabirimi"].InnerText = strParaBirimi;
xdDoc.Save(strVeriYol);
}
gvListe.EditIndex = -1;
gvDoldur();
}
protected void btnEkle_Click(object sender, EventArgs e)
{
xdDoc.Load(strVeriYol);
XmlElement xeYeni = xdDoc.CreateElement("urun");
xeYeni.InnerXml = "" + txtKod.Text + "" + txtAd.Text + "" + txtFiyat.Text + " " + txtParaBirimi.Text + "";
xdDoc.DocumentElement.AppendChild(xeYeni);
xdDoc.Save(strVeriYol);
Response.Redirect("default.aspx");
}
}

Üçüncü aşamamızda gridview imizi biçimlendirmek için gerekli olan css kodlarımız bulunuyor. Burada ilk önce table elementini sıfırlıyoruz. Daha sonra
gridview nesnemizin içinde tanımlamış olduğumuz, HeaderStyle, RowStyle ve AlternatingRowStyle özelliklerini biçimlendiriyoruz. Burada size tavsiyem
sayfanızın yorumlanmış halinin kaynak kodlarına bakmanızdır.
İlgili kodları buradan indirebilirsiniz.
Evet arkadaşlar geldik bir yazının daha sonuna, umarım faydalı olmuştur. Herkese çalışmalarında başarılar.

  • serdar samancıoğlu

    teşekkürler faydalı bi makale olmuş.

  • hasan

    kod linkine ulaşılmıyor.

    • apoStyLEE

      Teşekkür ederim, gerekli düzenlemeyi yaptım..

  • hasan

    hocam yine problem

    (İlgili kodları buradan indirebilirsiniz.)

    maalesef indirilemiyor. :sad:

  • hasan

    teşekkürler şimdi indirebildim.

  • http://Websitesi Sinan BOZKUŞ

    Merhaba,

    Benim xml tablom biraz daha farklı buradakinden. Bir çok sitelerde kullanılan flash ile efektli değişen resimler var bilirsiniz sanırım. Buradaki resimler xml e kayıt oluyor. Bu resimleri yazdığım admin paneli üzerinden değiştirmek istiyorum ancak gridview üzerinden güncelleme yapamadım.

    cdata[[]]

    cdata[[]]

    diye buna benzer şekilde.

    Bu tarz bir kullanım için nasıl bir güncelleme yapabilirim ?

  • http://Websitesi Sinan BOZKUŞ

    Kodları yazdım fakat çıkmamış html kod diye sanırım.

    buyuk kucuk işareti yerine normal parantez koyucam

    (item image=”resim linki” title=”asdad” url=”link”)cData[[]](/item)

    gibi.

    • apoStyLEE

      Merhaba, dediğinizi anladım fakat şuan konuyla ilgili bilgiye sahip değilim. En kısa zamanda araştırıp size döneceğim. İlginize teşekkürler.

  • http://Websitesi mehmet

    örnek için teşekkür ederim. aradığım cevabı sadece burada bulabildim. microsoft’un sitesi bile yetersiz kaldı. çalışmalarının devamında başarılar dilerim.

  • Özgür Erkaya

    bu denli önemli bir konuya ilgi neden bu kadar az anlamadım doğrusu… teşekkür ederim emeğin için bağzı sorunlarım oldu ama umarım konuyu takip ediyorsundur..
    sorum şu;
    dagınık bir şemaya sahip xml den veriyi nasıl okuyabiliriz
    örn:

    <<< burası gibi
    resim.jpg

    bu tür xml de vriyi nasıl düzenleyebiliri z okuma yazma silme vs ? ilgiliz için teşekür ederim