Asp.Net Mssql Verilerini Gelişmiş Sayfalama Örneği
-
Asp.Net ve MSSQL ile yaptığınız çalışmalarınızda uzun veriler içeren uygulamalarda gelişmiş sayfalama sistemi örneğimiz.
Sitil betiklerimiz
*{margin:0px;padding:0px;border:0px;font-size:100%;font:inherit;vertical-align:baseline;border-spacing:0px;} body{font-family:"Arial", Tahoma, Sans-Serif;font-size:12px;color:#545353;} .kapsul{margin:40px auto 0px auto;width:600px;} /* Tablo (Başlangıç) */ .tablo{border-left:1px solid #d1d1d1;border-top:1px solid #d1d1d1;width:599px;} .tablo th{background-color:#F6F6F6;border-right:1px solid #d1d1d1;padding:3px 8px;} .tablo tr:hover{background:#f2f2f2;} .tablo td{background-color:#FEFEFE;border-right:1px solid #d1d1d1;border-bottom:1px solid #d1d1d1;border-right:1px solid #d1d1d1;padding:3px 8px;} .tablo td a{text-decoration:none;color:#D9290B;} .tablo td a:hover{text-decoration:underline;} /* Tablo (Bitiş) */ .ontedi{color:#9A0124;background:#d6d6d6;float:right;padding:0px 3px;line-height:22px;margin-top:8px;text-decoration:none;border-radius:3px 0px 0px 3px;} /* Sayfalama (Başlangıç) */ .sayfalama_kapsul{margin:4px 0px 3px 0px;} .sayfalama_kapsul a{display:inline-block;float:left;padding:2px 4px;margin-right:1px;font-size:11px;background:#353C44;color:#fff !important;text-decoration:none;letter-spacing:1px;border-radius:3px;} .sayfalama_kapsul a:hover{background:#9A0124;color:#fefefe;} .sayfalama_kapsul a.secili{background:#9A0124;color:#fefefe !important;} /* Sayfalama (Başlangıç) */ /* Kütüphane (Başlangıç) */ .cb{clear:both;} /* Kütüphane (Bitiş) */Urunler.aspx dosyamızın içeriği
<div class="kapsul"> <asp:Repeater ID="rptListele" runat="server"> <HeaderTemplate> <table class="tablo"> <thead> <tr> <th>ID</th> <th>Başlık</th> <th>Tarih</th> <th>Durum</th> <th>İşlem</th> </tr> </thead> <tbody> </HeaderTemplate> <ItemTemplate> <tr> <td><%#Eval("urun_ID")%></td> <td><%#Eval("baslik")%></td> <td><%#fnTarih(Eval("tarih").ToString(), true)%></td> <td><%#fnOnayli_Onaysiz(Eval("durum").ToString())%></td> <td><a href="?islem=urun_duzenle&urun_ID=<%#Eval("urun_ID")%>">Düzenle</a></td> </tr> </ItemTemplate> <FooterTemplate> </tbody> </table> </FooterTemplate> </asp:Repeater> <asp:Literal ID="ltrSayfalama" runat="server"></asp:Literal> <div class="cb"></div> <a class="ontedi">www.ontedi.com</a> </div>Urunler.aspx.cs dosyamızın içeriği
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Text.RegularExpressions; using System.Configuration; using System.Data.SqlClient; public partial class Urunler : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { String strIslem = Request.QueryString["islem"]; fnUrunler(); } public Int32 parAdet = 8; private void fnUrunler() { String strSQL_Kriter = "WHERE durum = 1"; String strKelime = Request.QueryString["kelime"]; strKelime = fnTemizle(strKelime); if (String.IsNullOrEmpty(strKelime) == false) { strSQL_Kriter = "WHERE urun_ID LIKE '%" + strKelime + "%' OR baslik LIKE '%" + strKelime + "%' OR ozet LIKE '%" + strKelime + "%' OR icerik LIKE '%" + strKelime + "%'"; } Int32 intGecerli_Sayfa = 1; String strGecerli_Sayfa = Request.QueryString["gecerli_sayfa"]; if (fnSayisal_Mi(strGecerli_Sayfa) == true) { intGecerli_Sayfa = Convert.ToInt32(strGecerli_Sayfa); } Int32 intGosterim_Adeti = parAdet; Int32 intToplam_Kayit = fnToplam_Kayit("tblUrunler", strSQL_Kriter); Int32 intBaslangic_Degeri = (intGecerli_Sayfa - 1) * intGosterim_Adeti; Int32 intBitis_Degeri = intGecerli_Sayfa * intGosterim_Adeti; ltrSayfalama.Text = fnSayfalama("?kelime=" + strKelime + "", intGecerli_Sayfa, intToplam_Kayit); SqlConnection bag = fnMssql(); SqlCommand cmdSQL = new SqlCommand("SELECT urun_ID, kategori_ID, urun_kodu, baslik, tarih, durum FROM (SELECT row_number() over (order by urun_ID ASC) AS satir, * FROM tblUrunler " + strSQL_Kriter + ") AS tblTablo WHERE tblTablo.satir > " + intBaslangic_Degeri + " AND tblTablo.satir <= " + intBitis_Degeri + " order by urun_ID ASC", bag); bag.Open(); rptListele.DataSource = cmdSQL.ExecuteReader(); rptListele.DataBind(); cmdSQL.Dispose(); bag.Close(); bag.Dispose(); } public SqlConnection fnMssql() { SqlConnection bag = new SqlConnection(ConfigurationManager.ConnectionStrings["mssqlDB"].ConnectionString); return bag; } public String fnTemizle(String parVeri) { if (String.IsNullOrEmpty(parVeri) == false) { parVeri = parVeri.Replace("'", ""); parVeri = parVeri.Replace(">", ""); parVeri = parVeri.Replace("<", ""); parVeri = parVeri.Replace("%", ""); parVeri = parVeri.Replace("*", ""); } return parVeri; } public Boolean fnSayisal_Mi(String parVeri) { Boolean blnDonen_Deger = false; if (String.IsNullOrEmpty(parVeri) == true) { blnDonen_Deger = false; } else { Regex desen = new Regex("^[0-9]*$"); blnDonen_Deger = desen.IsMatch(parVeri); } return blnDonen_Deger; } public String fnSayfalama(String parAdres_Satiri, Int32 parGecerli_Sayfa, Int32 parToplam_Icerik) { Int32 intSayfa_Alt_Siniri; Int32 intSayfa_Ust_Siniri; Int32 intSol_Grup_Sayisi; Int32 intSag_Alt_Sinir; float fltSayfa_Sayisi = (float)parToplam_Icerik / parAdet; Int32 intSayfa_Sayisi = (Int32)parToplam_Icerik / parAdet; String strSayfa_Sayisi = fltSayfa_Sayisi.ToString(); if (strSayfa_Sayisi.IndexOf(",", 0) > -1 || strSayfa_Sayisi.IndexOf(".", 0) > -1) { intSayfa_Sayisi += 1; } String strDonen_Deger = "<div class=\"sayfalama_kapsul\">"; if (parGecerli_Sayfa <= intSayfa_Sayisi) { Int32 intSayfa_Araligi = 2; intSayfa_Alt_Siniri = parGecerli_Sayfa - intSayfa_Araligi; intSayfa_Ust_Siniri = parGecerli_Sayfa + intSayfa_Araligi; intSol_Grup_Sayisi = 1 + intSayfa_Araligi; intSag_Alt_Sinir = intSayfa_Sayisi - intSayfa_Araligi; //Adım 1 if (intSayfa_Ust_Siniri > intSayfa_Sayisi) { intSayfa_Alt_Siniri = intSayfa_Sayisi - (2 * intSayfa_Araligi); intSayfa_Ust_Siniri = intSayfa_Sayisi; } //Adım 2 if (intSayfa_Alt_Siniri <= 0) { intSayfa_Alt_Siniri = 1; intSayfa_Ust_Siniri = intSayfa_Alt_Siniri + (2 * intSayfa_Araligi); if (intSayfa_Ust_Siniri >= intSayfa_Sayisi) { intSayfa_Ust_Siniri = intSayfa_Sayisi; } } //Adım 3 if (intSol_Grup_Sayisi >= intSayfa_Alt_Siniri) { intSol_Grup_Sayisi = intSayfa_Alt_Siniri - 1; } //Adım 4 if (intSag_Alt_Sinir <= intSayfa_Ust_Siniri) { intSag_Alt_Sinir = intSayfa_Ust_Siniri + 1; } //Adım 5 if (parGecerli_Sayfa > 1) { strDonen_Deger += "<a href=\"" + parAdres_Satiri + "1\" title=\"İlk Sayfa\">[«]</a>"; Int32 intOnceki_Sayfa = parGecerli_Sayfa - 1; strDonen_Deger += "<a href=\"" + parAdres_Satiri + "&gecerli_sayfa=" + intOnceki_Sayfa + "\" title=\"Önceki Sayfa\">[««]</a>"; } //Adım 6 for (Int32 i = 1; i < intSol_Grup_Sayisi + 1; i++) { if (i == parGecerli_Sayfa) { strDonen_Deger += "<a title=\"" + i + ". Sayfa\" class=\"secili\">" + i + "</a>"; } else { strDonen_Deger += "<a title=\"" + i + ". Sayfa\" href=\"" + parAdres_Satiri + "&gecerli_sayfa=" + i + "\">" + i + "</a>"; } } //Adım 7 if (intSayfa_Alt_Siniri - intSol_Grup_Sayisi > 1) { strDonen_Deger += "<a>. . .</a>"; } //Adım 8 for (Int32 i = intSayfa_Alt_Siniri; i < intSayfa_Ust_Siniri + 1; i++) { if (i == parGecerli_Sayfa) { strDonen_Deger += "<a title=\"" + i + ". Sayfa\" class=\"secili\">" + i + "</a>"; } else { strDonen_Deger += "<a title=\"" + i + ". Sayfa\" href=\"" + parAdres_Satiri + "&gecerli_sayfa=" + i + "\">" + i + "</a>"; } } //Adım 9 if (intSag_Alt_Sinir - intSayfa_Ust_Siniri > 1) { strDonen_Deger += "<a>. . .</a>"; } //Adım 10 for (Int32 i = intSag_Alt_Sinir; i < intSayfa_Sayisi + 1; i++) { if (i == parGecerli_Sayfa) { strDonen_Deger += "<a title=\"" + i + ". Sayfa\" class=\"secili\">" + i + "</a>"; } else { strDonen_Deger += "<a title=\"" + i + ". Sayfa\" href=\"" + parAdres_Satiri + "&gecerli_sayfa=" + i + "\">" + i + "</a>"; } } //Adım 11 if (parGecerli_Sayfa != intSayfa_Sayisi) { Int32 intSonraki_Sayfa = parGecerli_Sayfa += 1; strDonen_Deger += "<a href=\"" + parAdres_Satiri + "&gecerli_sayfa=" + intSonraki_Sayfa + "\" title=\"Sonraki Sayfa\">[»]</a>"; strDonen_Deger += "<a href=\"" + parAdres_Satiri + "&gecerli_sayfa=" + intSayfa_Sayisi + "\" title=\"En Son Sayfa\">[»»]</a>"; } } strDonen_Deger += "</div>"; return strDonen_Deger; } public Int32 fnToplam_Kayit(String parTablo, String parKriter) { Int32 intDonen_Deger = 0; if (String.IsNullOrEmpty(parTablo) == false) { if (String.IsNullOrEmpty(parKriter) == false) { SqlConnection bag = fnMssql(); SqlCommand cmdSQL = new SqlCommand("SELECT Count(*) AS T FROM " + parTablo + " " + parKriter + "", bag); bag.Open(); SqlDataReader drSQL = cmdSQL.ExecuteReader(); if (drSQL.HasRows == true) { drSQL.Read(); { String strToplam = drSQL["T"].ToString(); if (fnSayisal_Mi(strToplam) == true) { intDonen_Deger = Convert.ToInt32(strToplam); } } } else { intDonen_Deger = 0; } drSQL.Dispose(); cmdSQL.Dispose(); bag.Close(); bag.Dispose(); } } return intDonen_Deger; } public String fnTarih(String parTarih, Boolean blnSaat) { String strDonen_Deger = ""; try { String[] arrAylar = { "", "Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık" }; String[] arrGunler = { "Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi" }; DateTime dtmTarih = DateTime.Parse(parTarih); String strTarih = dtmTarih.ToString("yyyy-MM-dd HH:mm"); Int32 intYil = dtmTarih.Year; String strYil = intYil.ToString(); Int32 intAy = dtmTarih.Month; String strAy = arrAylar[intAy]; Int32 intGun = dtmTarih.Day; String strGun = intGun.ToString(); String strZaman = dtmTarih.ToShortTimeString(); Int32 intHaftanin_Gunu = (Int32)dtmTarih.Date.DayOfWeek; String strGun_Adi = arrGunler[intHaftanin_Gunu]; strDonen_Deger = strGun + " " + strAy + " " + strYil + " " + strGun_Adi; if (blnSaat == true) { strDonen_Deger = strDonen_Deger + ", " + strZaman; } } catch { } return strDonen_Deger; } public String fnOnayli_Onaysiz(String parVeri) { String strDonen_Deger = ""; if (parVeri == "True") { strDonen_Deger = "<span style=\"color:green;\">Onaylı</span>"; } if (parVeri == "False") { strDonen_Deger = "<span style=\"color:red;\">Onaysız</span>"; } return strDonen_Deger; } }
mutfakDB adlı veritabanında tblUrunler adlı tablomuzun tsql kodlarıCREATE TABLE tblUrunler ( [urun_ID] int PRIMARY KEY NOT NULL IDENTITY(1,1), [baslik] nvarchar(255), [ozet] nvarchar(MAX), [icerik] nvarchar(MAX), [tarih] datetime NULL DEFAULT getdate(), [okunma] int NULL DEFAULT 0, [sira] int DEFAULT 0, [durum] bit NULL DEFAULT 0 )
web.config dosyasının içeriği
<?xml version="1.0"?> <configuration> <connectionStrings> <add name="mssqlDB" connectionString="Data Source=localhost;Initial Catalog=mutfakDB;User ID=sa;Password=1234" providerName="System.Data.SqlClient"/> </connectionStrings> <system.web> <customErrors mode="Off"/> <compilation debug="true" targetFramework="4.0"> <assemblies> <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/> </assemblies> </compilation> <httpRuntime requestValidationMode="2.0"/> </system.web> <system.webServer> <staticContent> <mimeMap fileExtension=".coffee" mimeType="coffeescript"/> <mimeMap fileExtension=".woff" mimeType="application/x-font-woff"/> </staticContent> </system.webServer> </configuration>Projemizin görünümü

Bol sayfalamalı günler :)
http://www.ontedi.com/aspnet/aspnet-mssql-verilerini-gelismis-sayfalama-ornegi
-
eline sağlık hocam
entity frameworkle veri basmak yerine ilkel olan bu yontem performans açısından çok daha iyi bence
-
Seni döverim hocam. Adres ver evine bomba atalım. Parmaklarını kesip birdaha kod yazdırmam!
Tabi işin şakası ama çok sinirlendim hocam. Neden SQL Parameter kullanmıyorsun?
-
Entity ile uğraşmışlığım yok, kendimce kütüphane oluşturdum ve yaptığım uygulama/sitelerde kütüphanemi kullanıp hızlı ve performanslı çözümler üretmeye çalışıyorum.
SQL Parametre olayı birgün sorun çıkarmıştı, o yüzden kullanmadım. Zaten gelen değerleri filtreden geçiriyorum.
İlginize teşekkürler.
ontedi tarafından 01/Haz/14 20:15 tarihinde düzenlenmiştir
