30 Ekim 2007

GridView'e Programatik Veri Bağlamada Sayfalama ve Sıralama İşlemleri

GridView'e programatik olarak veri bağladığında eğer sayfalama(paging) ve sıralama(sorting) işlemi yapılırsa gridin bu işlemlerini ne şekilde yapacağını da yine programatik olarak belirlemek gerekecektir. Sayfalama işlemi için PageIndexChanging, sıralama işlemi için ise Sorting evetleri kullanılmaktadır. Sayfalama işlemi için yazılacak event metodunda yapılacak işlemler gridin yeni sayfa indeksini belirlemek iken, sıralama işleminde durumlar biraz daha karışıktır. Sorting event'i tetiklendiğinde grid kontrolü her defasında sıralama yönünü Ascending olarak getireceği için kullanıcının tersten sıralama (Descending) işlemi yapması durumunda bizim ekstra kodlarla bu durumu ele almamız gerekecektir. Burada sıralama yönünü geçici olarak bir yerde depolamak gerekecektir ki; en uygun yerin ViewState olduğunu söyleyebilirim. Aşağıdaki kodlarda gridview kontrolünün sayfalama ve sıralama işlemlerini nasıl ele alabileceğimiz görüntülenmektedir. Yorum satırları size yardımcı olacaktır.


void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
// e parametresinden gelen index numarasını gridview'ın PageIndex'ine atayıp
// verileri tekrar bağlamak sayfalama işlemi için yeterli olacaktır
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}

void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
// İlk sort işlemi yapıldığında çalışır
if (ViewState["siralananKolon"] == null)
{
ViewState.Add("siralananKolon", e.SortExpression);
ViewState.Add("siralamaYonu", "ASC");
}
else
{
// Aynı kolon 2. kez sıralandığında çalışır
if (ViewState["siralananKolon"].ToString() == e.SortExpression)
{
if (ViewState["siralamaYonu"].ToString() == "ASC")
ViewState["siralamaYonu"] = "DESC";
else
ViewState["siralamaYonu"] = "ASC";
}
// Farklı bir kolon sıralandığında çalışır
else
{
ViewState["siralananKolon"] = e.SortExpression;
ViewState["siralamaYonu"] = "ASC";
}
}
// Veriyi tekrar yüklemeden önce sıralanacak alanı ve sıralama kriterini belirlemek gerekir.
// DataTable nesnesini tekrar elde edip, görünümünü(DataView) değiştiriyoruz
DataTable dt = (DataTable)GridView1.DataSource;
dt.DefaultView.Sort = ViewState["siralananKolon"].ToString() + " " + ViewState["siralamaYonu"].ToString();
GridView1.DataBind();
}

Hiç yorum yok: