ASP.NET ile Verileri Sayfalamak
04 Nisan 2009 Yazan mseker
Kategori Asp.NET, Genel, Yazılım - Program
Bu yazı 495 kez okundu
Merhabalar,
Bu yazımda sizlere veritabanından çekilen birden fazla kaydın nasıl sayfalanacağını anlatmaya çalışacağım. Eğer zşyaretçimiz sitemizden bir liste almak istiyor ve bu listede pek çok kaydı listeleyeceksek sayfamız aşağıya doğru uzayıp gidecektir. pek çoğumuz da bunun sayfanın tasarımı çirkinleştirdiğini düşünür ve istenilen listenin sayfalar halinde gösterilmesini isteriz. Her ne kadar .NET bize GridView nesnesiyle bunu kolayca kod yazmadan yapmamızı sağlasa da bazen kod ile yazarak bunu yapmamız gerekebiliyor. Bir gün bana da lazım olmuştu ve o anda hiç kod yazmak istemediğimden internetten araştırma yaptım. Ya o zaman ben bulamadım ya da daha önce hiç kimse bunu internette yayınlamamıştı. Sadece bir kod örneği buldum ama o kodu yazan arkadaş da işi öyle bir dolandırmışki tam 3 saat uğraştım ne yaptığını anlamak için. Neticede anladım ama çok fazla zaman kaybetmiştim. Oturup kodu kendim yazmaya karar verdim. Umarım sizin de işinize yarar. Aşağıda verileri çeken bir script bulunmakta. Bu script ile access veritabanına bağlanıyoruz. İstenilen listeyi Sql sorgumuzla belirtiyoruz. Bu işin en önemli espirisi verileri sayfalarken X. Ve Y. kayıtlar arasındaki verileri nasıl çekeceğimizdir. MySQL de bunu “Limit” ile kolayca yapabiliyoruz ancak “MS Sql Server” da bunu yapmak için birazcık kastırmamız gerekiyor. Belki daha başka yolu da vardır ama o anda benim aklıma gelen iç içe “Select” sorgusu kullanarak bunu yapmak oldu. Bir kaç değişken kullanarak bu aralığı kolayca belirtebiliriz. SQL de select ile birlite “TOP” ifadesini de kullandık mı tamamdır.
<script runat=”server”>
OleDbConnection Baglanti;
OleDbCommand Command1,Command2;
OleDbDataReader VeriOku;
int HerSayfadaListelenecekKayitSayisi = 2;
int ToplamKayitSayisi = 0;
double ToplamSayfaSayisi = 0;
protected void Page_Load(object sender, EventArgs e)
{
Baglanti = new OleDbConnection(“Provider=Microsoft.Jet.OLEDB.4.0;DATA Source=” + Server.MapPath(“vt_kalesray.mdb”));
Baglanti.Open();
int Sayfa = Convert.ToInt32(Request.QueryString["Sayfa"]);
if (Sayfa == 0)
Sayfa = 1;
Command1 = new OleDbCommand(“Select count(*) from Urunler”, Baglanti);
ToplamKayitSayisi = (int)Command1.ExecuteScalar();
ToplamSayfaSayisi = Math.Ceiling(Convert.ToDouble((double)ToplamKayitSayisi / (double)HerSayfadaListelenecekKayitSayisi));
int ListeBasi = Convert.ToInt32((HerSayfadaListelenecekKayitSayisi * (Sayfa – 1)));
int ListeSonu = Convert.ToInt32((HerSayfadaListelenecekKayitSayisi * Sayfa));
if (Sayfa == 1)
Command2 = new OleDbCommand(“SELECT top “ + HerSayfadaListelenecekKayitSayisi + ” * FROM Urunler”, Baglanti);
else
Command2 = new OleDbCommand(“SELECT top “ + HerSayfadaListelenecekKayitSayisi + ” * FROM Urunler WHERE Id NOT IN (SELECT top “ + ListeBasi + ” Id FROM Urunler)”, Baglanti);
VeriOku = Command2.ExecuteReader();
}
</script>
Yukarıdaki scripti ASPX sayfamızın <html> etiketinin üstüne eklemeliyiz. Scriptimizi ekledikten sonra listemizin görünmesini istediğimiz yere aşağıdaki kodu eklersek listemizi sayfalar halinde görünecektir Değişkenlerdeki değerleri değiştirerek her sayfalamada kaç adet kaydın gösterileceğini ayarlayabiliriz.
<div>
<%
while (VeriOku.Read())
{
%>
<%=VeriOku[2]%>, <%=VeriOku[3]%><br />
<%
}
%>
<%
for (int i = 1; i <= ToplamSayfaSayisi; i++) {
%>
<a href=”Default.aspx?Sayfa=<%=i %>“><%=i %></a>
<% } %>
</div>
Değişken isimlerini uzun uzun yazdığım için ne amaçla kullandığımı kolayca anlayacağınızı sanıyorum. Yine de anlamadığınız biryer olursa yazı hakkındaki yorumlarınızda sorabilirsiniz. Eveeet yazımızın da sonuna geldik. Bir sonraki yazımızda görüşmek üzere…









msk demişki 07 Nisan 09 12:37
Murat kardeş eline saglık
ertugrul demişki 01 Haziran 09 11:52
merhabalar uygulamanızı yaptım fakat kütüphanelerden system.data.oledb’yi nasıl eklediniz onu merak ettim.
oyun oyna demişki 24 Temmuz 09 10:17
İnternet asp.net ile sayfalama olayını anlatan en başarılı makale bence. Teşekkürler.
Kaan demişki 30 Temmuz 09 12:45
Her türlü etkiye açık querystring gibi kaynaklar bilgi okurken Convert.ToInt32 ifadesi kullanmak son derece sakıncalıdır diye düşünüyorum.
long sayfa;
long.TryParse(Request.QueryString["sayfa"], out sayfa);
daha sağlıklı olur