10 Şubat 2011 Perşembe

GridView Paging ve Sorting(Sayfalama ve Sıralama)

En sık kullandığımız veri gösterme kaynaklarından biridir GridView. Verileri gösterirken de, kullanıcıya bazı işlevsellikler katmak isteyebiliriz. Şimdi bunları kısaca size anlatmaya çalışacağım.

GridView'da verileri getirirken DataSource kullanmışsak (yani veri kaynağı olarak, gridview'in kendi wizardını kullanmışsak), sevgili Visual Studio bize kendi kodlarını yazıp, sorting ve paging'i hiç bize zahmet vermeden kendisi yazıyor. Peki, ya biz verileri code-behind tarafında veritabanına bağlanıp çekiyorsak?

Bu durumda kendi kodlarımızı kendimiz yazacağız. Oldukça basit ve az kod yazacağımızdan, rahatlıkla anlaşılacaktır zaten.

Bu işlemleri yapmadan önce, unutmamamız gereken şey, GridView'ın özelliklerinden AllowPaging ve AllowSorting'i true yapmak. Ayrıca sıralama işlemleri için, belirlediğimiz her bir boundfield'ın SortExpression özelliğine o kolonun ismini vermek.


<asp:BoundField DataField="Name" HeaderText="Adı ve soyadı" SortExpression=" Name" />
<asp:BoundField DataField="TCKimlikNo" HeaderText="TC Kimlik No" SortExpression=" TCKimlikNo" />


Paging:

Sayfalama için yapmamız gereken, GridView'in PageIndexChanging eventini tetiklemek. Daha sonra da şu kodları yazdığımız taktirde, istediğimiz sayfalamayı yapacaktır.

 
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }

Hatırlatma: GridView'da bir sayfada, gösterilmek istenen veri sayısını, GridView'in özelliklerinden PageSize'ini değiştirerek yapabilirsiniz..

Sorting:
 Sıralama için de yine aynı şekilde Sorting eventinin tetiklenmesi gerekir. Daha sonra da sıralamanın azalan mı artan mı olduğunu belirlemek için bir property tanımlayıp, oradan sıralama bilgisini aldım. Daha sonra da DataView'in Sort isimli üyesini çağırıp, sıralama şeklini(azalan-artan) belirterek GridView'i istediğimiz şekilde sıralamış olduk.


    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        string sortType = "";
        if (GridViewSortDirection == SortDirection.Ascending)
        {
            GridViewSortDirection = SortDirection.Descending;
            sortType = " DESC";
        }
        else
        {
            GridViewSortDirection = SortDirection.Ascending;
            sortType = " ASC";
        }

        if (dt != null)
        {
            DataView dv = new DataView(dt);
            dv.Sort = e.SortExpression + " " + sortType;

            GridView1.DataSource = dv;
            GridView1.DataBind();
        }

    }
    public SortDirection GridViewSortDirection
    {
        get
        {
            if (ViewState["sortDirection"] == null)
                ViewState["sortDirection"] = SortDirection.Ascending;
            return (SortDirection)ViewState["sortDirection"];
        }
        set { ViewState["sortDirection"] = value; }
    }

Hatırlatma: Yukarıda da belirttiğim gibi, sıralamanın gerçekleşmesi için, GridView'da göstermek istediğimiz alanların(BoundField) SortExpression özelliğini dolu geçmemiz gerekir.

0 yorum: