Son Haberler
Anasayfa / Yazılım / ASP.NET / DataSet Sıralama İşlemi

DataSet Sıralama İşlemi

Bu yazımda Data Set kullanarak GridView kontrolümüz içinde listelenen verilerin sıralamasına değinmek istiyorum. Bunun için aşağıdaki yazıya öncelikle göz atınız ve bu uygulamayı indirip, bunun üzerinden devam ediniz. (Northwnd veri tabanına sahip olduğunuzu var sayıyorum)

http://www.ismailgursoy.com.tr/data-setleri-view-state-icinde-saklamak/

DataSet’in DataViews özelliği sıralama, filtreleme, arama, düzenleme, yönlendirme gibi işlemleri yapmamızı sağlar. Herhangi bir GridView kontrolümüz ile bir DataTable bağlandığında normalde otomatik olarak DefaultView özelliği bizim için otomatik olarak erişilebilir durumdadır. Buna ek olarak eğer biz sıralama yapmak istiyor isek bir takım parametleri ayarlamalıyız.

Sıralama yapabilmek için ilk yapmamız gereken AllowSorting özelliğinin True yapılmasıdır. Bu işlem yapıldıktan sonra GridView kontrolünde Header alanında sütun adları hyperlink şeklinde olur, yani tıklanabilir bir link gibidir.

Şimdi uygulamamıza geri dönelim, web formumuzun design görünümünde GridView kontrolümüzü seçiyoruz ve sağda özelliklerden AllowSorting özelliğini True yapıyoruz. Daha sonra GridView kontrolümüz seçili iken yine sağda yer alan kısımdan yıldırım işaretine tıklayıp kontrolümüzün eventlerini listeliyoruz. Burada Sorting eventinde çift tıklıyoruz. CodeBehind tarafında bizim için ilgili event handler oluşuyor.

Daha sonra Default.aspx.cs dosyası içinde aşağıdaki gibi kodlarımızı yazalım :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Sayfam eğer ilk defa yüklenecek ise yani postback edilmemişse aşağıdaki metodu çalıştır.
        if (!IsPostBack)
        {
            veriBagla();
        }
    }
    //metodumu tanımlıyorum
    private void veriBagla()
    {
        //Bağlantımı nesnem.
        SqlConnection conn;
        //Verileri tutacağım dataset nesnemi tanımlıyorum.
        DataSet ds = new DataSet();
        //DataSet içindeki DataAdapter
        SqlDataAdapter adr;
        //Bağlantımı web config dosyamdan alıyorum

        if (ViewState["DataSetKategoriler"] == null)
        {
            string cs = ConfigurationManager.ConnectionStrings["Baglantim"].ConnectionString;
            conn = new SqlConnection(cs);
            //SqlDataAdapter için query
            adr = new SqlDataAdapter("SELECT CategoryID, CategoryName, Description FROM Categories", conn);
            //SqlDataAdapter dolduruluyor
            adr.Fill(ds, "Categories");
            ViewState["DataSetKategoriler"] = ds;
        }
        else
        {
            ds = (DataSet)ViewState["DataSetKategoriler"];
        }
        string siralamaIfadesi;
        if (gridSiralamaYonu == SortDirection.Ascending)
        {
            siralamaIfadesi = gridSiralamaIfadesi + " ASC";
        }
        else
        {
            siralamaIfadesi = gridSiralamaIfadesi + " DESC";
        }
        ds.Tables["Categories"].DefaultView.Sort = siralamaIfadesi;
        GVKontrol.DataSource = ds.Tables["Categories"].DefaultView;
        GVKontrol.DataBind();
    }
    protected void GVKontrol_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        //Sayfalama kodlarım
        int yeniSayfaIndex = e.NewPageIndex;
        GVKontrol.PageIndex = yeniSayfaIndex;
        veriBagla();
    }
    protected void GVKontrol_Sorting(object sender, GridViewSortEventArgs e)
    {
        string siralamaIfadesi = e.SortExpression;
        if (siralamaIfadesi == gridSiralamaIfadesi)
        {
            if (gridSiralamaYonu == SortDirection.Ascending)
            {
                gridSiralamaYonu = SortDirection.Descending;
            }
            else
            {
                gridSiralamaYonu = SortDirection.Ascending;
            }
        }
        else
        {
            gridSiralamaYonu = SortDirection.Ascending;
        }
        gridSiralamaIfadesi = siralamaIfadesi;
        veriBagla();
    }
    private SortDirection gridSiralamaYonu
    {
        get
        {
            if (ViewState["GridSiralamaYonu"] == null)
            {
                ViewState["GridSiralamaYonu"] = SortDirection.Ascending;
            }
            return (SortDirection)ViewState["GridSiralamaYonu"];
        }
        set
        {
            ViewState["GridSiralamaYonu"] = value;
        }
    }

    private string gridSiralamaIfadesi
    {
        get
        {
            if (ViewState["GridSiralamaIfadesi"] == null)
            {
                ViewState["GridSiralamaIfadesi"] = "CategoryID";
            }
            return (string)ViewState["GridSiralamaIfadesi"];
        }
        set
        {
            ViewState["GridSiralamaIfadesi"] = value;
        }
    }
}

Görüldüğü gibi bayağı bir kod yazdık, bayağı bir değişiklik yaptık. Uygulamamızı çalıştırdığımızda artık veri listesinin header alanı link gibi tıkladığımızda görüldüğü gibi sıralama yapıyor.

Aşağıdaki linkten uygulamayı indirebilirsiniz.

Bir yorum

  1. hocam paylaşım için teşekkür ederim ama ben load more data olayını arıyorum biraz daha açıyım ilk başta 10 veri çekecem devamını göster butonuna tıklanınca +10 veri daha çekecek yapamadım bir türlü yardımcı olursanız sevinirim

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir