Birkaç ay önce yazmaya başladığım, ancak yarısını bile bitiremediğim bir yazı üzerinde yeniden çalışmaya başladım belki bitiririm umuduyla Bu esnada GridView ile ilgili ilginç bir bug’a denk geldim ve kaynağını ile çözümünü paylaşmak istedim.
GridView kontrolünü SqlDataSource’a bağladığımızda SortDirection isimli property düzgün çalışmakta ve duruma göre SortDirection.Ascending veya SortDirection.Descending değerini taşımaktadır. Ancak kontrolü ObjectDataSource’a ya da code-behind kısmında veriye bağlarsanız bu özellik düzgün çalışmamakta ve sürekli olarak SortDirection.Ascending değerini getirmekte. Aynı durum Sorting event’inde metoda taşınan GridViewSortEventArgs parametresinin SortDirection property’si içinde geçerli. Bu durum bir bug olarak bildirilmiş, ancak By Design olarak işaretlendiği içinde tam olarak kapatılmış değil, yani 4.0 sürümünde de aynı durum devam etmekte. Bug ve çözümü ile ilgili bu linke göz atabilirsiniz.
Aşağıdaki kod parçası bu sorunu düzeltmek(daha doğrusu yama yapmak) için kullanılabilir. Yapılacak bir postback işlemi sonrasında düzgün SortDirection değeri elde edilecektir. Kod örneği Microsoft Connect sayfasındaki kod örneğinin modifiye edilmiş halidir.
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) { string previousSortExpression = (string)ViewState["SortDirection"]; string sortExpression = e.SortExpression; SortDirection sortDirection = e.SortDirection; if (sortExpression.Equals(previousSortExpression)) { sortDirection = SortDirection.Descending; ViewState["SortDirection"] = string.Empty; } else { ViewState["SortDirection"] = sortExpression; } //Bu satırda sortDirection değişkeni Ascending veya Descending değerini taşır. //Bu değere göre ilgili işlemler yapılabilir. DataBind() vb. }