Alfabetik Sayfalama
Bu makalemizde gridview de klasiklesmis olan numeric bazli yada navigation bazli sayfalama düzeninden vazgeçip gridview üzerinde Alfabetik sayfalama yapacagiz. Bu bize ne saglayacak? Örnegin bir fihrist, sözlük vs.. yaptığımiz da A harfindekileri kayitlari bulmak isteriz. Ya da sadece B harfindeki kayitlari... Klasik sayfalama (1.2.3 yada prev., next) bize burada çözüm olmayacaktir. işte bunu çözmek için Alfabetik sayfalama en iyi çözümdür.
Simdi isterseniz bu çözümü örnekleyelim; SQL Server 2005 içindeki AdventureWorks Database’indeki Person.Contact tablosundaki kayitlarimi gridview ile listeleyelim.
Ilk olarak bir web projesi açalim; Ben aliskanlik olarak ajax projesi açtim.
Daha sonra formumuzda ne yapacagimiza geçelim. Sayfamizda Alfabetik olarak siralanan harfler olacak ve biz bu harflere tikladigimiz zaman; gridview de bu harfe bagli olan(örnegin A ile baslayanlar) kayitlar listelenecek. Ilk olarak formumuz üzerine bir adet panel ve gridview ekleyelim. Paneli ekledik çünkü bu panelin üzerine LinkButton’lar olusturacagiz.
Evet simdi isterseniz projemize hareket katalim ve projemize AJAX özelliklerini de ekleyelim. Bunun için formumuza Script Menager, UpdatePanel ve UpdateProgress de ekleyelim.
Evet simdi butonlara tikladigimizda gridview refresh olmadan kayitlari listeleyecek. işterseniz ilk olarak Panel üzerinde listelenecek olan Alfabetik Paging’i olusturalim. protected void CreateLink()
{
string[] letters = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K",
"L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
"W", "X", "Y", "Z", "All"};
for (int i = 0; i < letters.Length; i++)
{
LinkButton myLetter = new LinkButton();Yeni Bir LinkButton olusturduk
myLetter.ID = myLetter + i.ToString();
myLetter.CommandName = "LetterPaging";//
myLetter.CommandArgument = letters[i].ToString();
myLetter.Text = letters[i].ToString() + " ";
myLetter.Command += new CommandEventHandler(myLetter_Command); // Burada Command Eventini olusturuyoruz.
this.PagingPanel.Controls.Add(myLetter);//Olusturulan Butonu Panel’e ekliyoruz
}
}
Simdi isterseniz pagingimizi test edelim; Tabi önce bu Void’i form_load da çagirmaliyiz.

Pagingimizi olusturduk... Simdi Bu linklere tiklaninca olusacak olan kodlari yazalim. Yukarida
myLetter.Command += new CommandEventHandler(myLetter_Command);
Olusturdugumuz Command eventi içerisini yazalim;
private void myLetter_Command(object sender, CommandEventArgs e)
{
if (e.CommandName.ToString() == "LetterPaging")
{
if (e.CommandArgument.ToString() != "All")
{
GetContactsByLetter(e.CommandArgument.ToString());
}
else
{
GetAllContacts();
}
}
} Burada Command Name’e göre ve gelen commandArgument değerine göre 2 işlem yapiliyor; Eger CommandArgument değeri All ise GetAllContacts Voidini çagiriyor degilse de GetContactsByLetter(“A”) voidini çagriyor. Simdi bunlari olusturalim. SqlConnection Cnn;
SqlDataAdapter Da;
DataSet Ds;
private void GetAllContacts()//tüm kayitlari listele
{
Cnn = new SqlConnection("Data Source=localhost; initial catalog=AdventureWorks; trusted_connection=yes");
if (Cnn.State == ConnectionState.Closed) Cnn.Open();
Da = new SqlDataAdapter("SELECT top 20 FirstName + ' ' + LastName as ContactName, EmailAddress FROM Person.Contact", Cnn);
Ds = new DataSet();
Da.Fill(Ds, "TBL");
GridView1.DataSource = Ds.Tables[0];
GridView1.DataBind();
} private void GetContactsByLetter(string Letter)//Gelen Harfe göre listele
{
Cnn=new SqlConnection("Data Source=localhost; initial catalog=AdventureWorks; trusted_connection=yes");
if (Cnn.State == ConnectionState.Closed) Cnn.Open();
Da = new SqlDataAdapter("SELECT top 20 FirstName + ' ' + LastName as ContactName, EmailAddress FROM Person.Contact where Firstname like '" + Letter + "%'", Cnn);
Ds = new DataSet();
Da.Fill(Ds, "TBL");
GridView1.DataSource = Ds.Tables[0];
GridView1.DataBind();
} Pagingimizden sonra Listelenecek olan kayitlarimiz da hazir; ama kullanici sayfaya geldiginde sayfayi bos görmesin bunun için GetAllContacts voidini form_load da çagiralim. Tabi linkleri olusturmak için CreateLink voidinide... protected void Page_Load(object sender, EventArgs e)
{
GetAllContacts();
CreateLink();
} Projemizi çalistiralim;
Tüm kayitlar listelendi; Simdi a harfine tiklayalim;
Postback olmuyor ve Ajax UpdateProgress ile kullaniciyi bilgilendiriyoruz...
Evet iste A harfi ie baslayan kullanicilari listeledik : ) Bu makalenin de sonuna geldik, baska bir makalede görüşmek üzere başarı ve iyi günler dilerim. Sem GÖKSU
MCP | MCAD.NET | MCTS
Örnek Kodlar için mail adresimi kullanabilirsiniz
semgoksu@ semgoksu.com
Kaynaklar
http://msdn.com
http://www.codeproject.com