17 Şub 2007 DataBound Kontroller ile SQL Paging Kullanımı Kategori: ASP.NET Etiketler: ASP.NET AjaxASP.NET 2.0 1 Yorum Merhaba arkadaşlar bu makalemizde SQL server ile Databound (Gridview, Datalist, Repeater) kontroller ile pagin’in nasıl yapıldığına bakacağız.DataBound Kontroller ile SQL Paging KullanımıSQL Server 2005 ile gelen ROW_NUMBER() fonksiyonu ile SQL Server üzerinde sayfalama yapmak artık çok kolay. ROW_NUMBER() fonksiyonu bize kayıtlarımızın yanında bir satır numarası olusturur ve sayfalamamız ve indexlememiz için bize yardımcı olur. Row_Number() Kullanımı: select top 10 row_number() over (order by name asc) as SatyrNO, ProductID, Name,ProductNumber from Production.Product Gördügümüz gibi bize geriye satır no isimli bir field döndürüyor ve 1 den artarak bize satır numarası olusturuyor. Bu özellikle windows uygulamaları için güzel bir çözüm oldu. Web uygulamarında pagingleme oldukça basitti ama onunda dezavantajları vardı. Özellikle çok fazla kayıt içeren data datagride yüklendiginde tüm veri hem gride yüklenirken oldukça zorlanıyordu hemde sayfalar arasında gezinirken veri tekrar tekrar yükleniyordu. SQL server ile gelen ROW_NUMBER() fonksiyonu ile bize identity gibi artan bir satır numarası döner ve biz bu satır numarası üzerinde istedigimiz degerleri gönderir istedigimiz kadar kaydı görüntüleyebiliriz. Yani grid üzerinde kaç kayıt görüntülemek istersek o kadar kayıt gride yüklenecek. Buda inanılmaz bir performans kazancı olacak.Örnek:select * from (select row_number() over (order by name asc) as SatirNo, ProductID, Name,ProductNumber from Production.Product) Products where (SatirNo between 20 and 30)Gördügümüz gibi bize 20 ve 30 satır numarası arasındaki kayıtlar geri döndü. Artık örnegimize geçebiliriz.Yeni bir web site açalım ve bir grid ekleyelim. Gridimizi ekledikten ve pagin içinde bir label ekleyelim. Grid üzerinde 10 kayıt görüntüleyecegiz ve diger kayıtlara geçmek için olusturacagımız paging ile diger sayfalardaki kayıtlara geçecegiz.Not: Aynı islemi Datalist ve Repeater ile de yapabiliriz. Ben anlasılır olması için Gridview üzerinde yapacagım.Kodumuzu yazmaya baslayalım; ilk olarak connection stringi ayarlayalım. SqlConnection Cnn; SqlCommand Cmd; DataSet Ds; SqlDataAdapter Da; private string CnnStr() // Connection Stringi ayarladık { return "Data Source=*******;initial Catalog=*******;Uid=*******;pwd=*******"; }Connection Stringimizi olusturduk, simdi de Datayı çekecek olacak void'i yazalım. private void DatayiGetir(int Start, int End) // Görüntülenecek datayı çektik.. { Cnn = new SqlConnection(CnnStr()); string sqlstr = "select * from (select row_number() over (order by InsertionDate asc) as SatirNo, InsertionDate, UpdateDate from Messages) Messages where (SatirNo between " + Start + " and " + End + ")"; Da = new SqlDataAdapter(sqlstr, Cnn); Ds = new DataSet(); Da.Fill(Ds, "tbl"); GridView1.DataSource = Ds.Tables[0]; GridView1.DataBind(); }Voidimizi yazdıktan sonra simdi de sayfamızdaki paginglemeyi ayarlayalım. Bunun için öncelikle ihtiyacımız olan Toplam kayıt sayısıdır. Buradan sayfalanacak olan sayfa sayısını bulacagız. private int KayitSayisi() // Sayfalama için Toplam kayıt sayısını aldık. { Cnn = new SqlConnection(CnnStr()); string sqlstr = "select Count(*) from Messages"; if (Cnn.State == ConnectionState.Closed) Cnn.Open(); Cmd = new SqlCommand(sqlstr,Cnn); int recordCount= (int)Cmd.ExecuteScalar(); return recordCount; }Toplam kayıt sayısını aldıktan sonra simdi Sayfa sayısını bulalım ve pagini ekrana basalım.privatevoid PagingiOlustur() { int ToplamSayfaSayisi; StringBuilder sb = new StringBuilder(); if (KayitSayisi() % 10 == 0) { ToplamSayfaSayisi = KayitSayisi() / 10; } else { ToplamSayfaSayisi = KayitSayisi() / 10 + 1; } for (int i = 0; i < ToplamSayfaSayisi; i++) { sb.Append("<a href=SQLPagingAndCustomDataGrid.aspx?Sayfa=" + +(i) + ">" + (i + 1) + "</a>\n"); } Label1.Text = sb.ToString(); }Pagingimizi olusturduktan sonra artık paging isleminin çalısması için Formumuzun loadında Datayı getirecek vodidi ve paging olusturacak voidi çagıralım. private int SayfaNo, Baslangic, Bitis; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { if (Request.QueryString["Sayfa"] != null) { SayfaNo = Convert.ToInt32(Request.QueryString["Sayfa"]); } else { SayfaNo = 0; } Baslangic=(SayfaNo *10) + 1; Bitis = Baslangic + 10 -1; PagingiOlustur(); DatayiGetir(Baslangic,Bitis); } }Simdi Projemizi çalıstıralım;Satır numaralarına dikkat ederseniz 1 den 10 a kadar devam ediyor. 2. sayfaya geçelim.Yine satır numaralarına dikkat edersek 10 dan 20 ye kadar yani 2. sayfadaki kayıtları gösteriyor. Gerçekten çok hızlı : )Sizde uyguladıgınızda datanın gridview ile paginglenmesine göre daha performanslı oldugunu göreceksiniz. Bu makalenin de sonuna geldik, baska bir makalede görüsmek üzere basarı ve iyi günler dilerim. Sem GÖKSUMCP | MCAD.NET | MCTS Örnek Kodlar için mail adresimi kullanabilirsiniz askisem@hotmail.com Kaynaklarhttp://msdn.com Yorum (1) salih ipek / 7.7.2015 11:57:39 merhaba filtrelemede sıra no her zaman doğru olmayaiblir bunu nasıl çözebiliriz teşekkürler Yorum Yaz * Ad Soyad: * Email: * Message:
Yorum (1) salih ipek / 7.7.2015 11:57:39 merhaba filtrelemede sıra no her zaman doğru olmayaiblir bunu nasıl çözebiliriz teşekkürler
salih ipek / 7.7.2015 11:57:39 merhaba filtrelemede sıra no her zaman doğru olmayaiblir bunu nasıl çözebiliriz teşekkürler