(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
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
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();
}