﻿
{"id":1239,"date":"2013-01-05T22:13:47","date_gmt":"2013-01-05T22:13:47","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=1239"},"modified":"2013-01-05T22:18:24","modified_gmt":"2013-01-05T22:18:24","slug":"mvcde-tablo-sayfalama","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/mvcde-tablo-sayfalama\/","title":{"rendered":"MVC&#8217;de Tablo Sayfalama"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>\u00dczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z bir projenin, herhangi bir sayfas\u0131nda veritaban\u0131ndaki bilgileri, tablolamayla listeletti\u011fimiz zamanlar oluyor.Bu durumlarda veritaban\u0131m\u0131z\u0131n yo\u011funlu\u011funa ba\u011fl\u0131 olarak, verilerin hepsini, an\u0131nda g\u00f6stermekten ziyade, belirli par\u00e7a gruplar halinde listeletip, sayfalama yoluyla bu gruplara ula\u015f\u0131r\u0131z.Bu yaz\u0131m\u0131zda bu i\u015flemin nas\u0131l yap\u0131ld\u0131\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde irdeleyece\u011fiz.<br \/>\n<!--more--><br \/>\n\u00d6rnek olarak kendi olu\u015fturdu\u011fum &#8220;Sayfalama&#8221; ad\u0131ndaki veritaban\u0131n\u0131 kullanaca\u011f\u0131m.&#8221;Verilerim&#8221; tablosunda 1000 tane kay\u0131t mevcuttur.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/mvcde-tablo-sayfalama.html\/verilerim\" rel=\"attachment wp-att-1240\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1240\" alt=\"Verilerim\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/Verilerim.png\" width=\"241\" height=\"352\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/Verilerim.png 241w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/Verilerim-205x300.png 205w\" sizes=\"auto, (max-width: 241px) 100vw, 241px\" \/><\/a><\/p>\n<p>\u0130lk i\u015f olarak bir MVC projesi olu\u015fturuyorum ve gerekli i\u015flemleri yaparak bu verileri tabloda listeliyorum.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/mvcde-tablo-sayfalama.html\/verilerimlistesi\" rel=\"attachment wp-att-1242\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1242\" alt=\"verilerimlistesi\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/verilerimlistesi.png\" width=\"189\" height=\"475\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/verilerimlistesi.png 189w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/verilerimlistesi-119x300.png 119w\" sizes=\"auto, (max-width: 189px) 100vw, 189px\" \/><\/a><\/p>\n<p>Listelenen tablonun tam g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc g\u00f6stermek m\u00fcmk\u00fcn de\u011fil.Ancak yukar\u0131daki g\u00f6r\u00fcnt\u00fcde verilerimizi MVC projesinde tabloda listeledi\u011fimizi g\u00f6r\u00fcyorsunuz.<\/p>\n<p>Tablomuzda 1000 adet veri bulunmaktad\u0131r.Bu verileri bir d\u00fczen nizama g\u00f6re gruplay\u0131p, sayfalayaca\u011f\u0131m.Verilerimizi gruplarken, bir grup i\u00e7indeki veri say\u0131s\u0131 25 olacakt\u0131r.Yani bu tablomuzda en fazla 25 veri g\u00f6z\u00fckecektir.Sayfam\u0131z ilk a\u00e7\u0131ld\u0131\u011f\u0131nda tablomuzda, veritaban\u0131m\u0131zdaki ilk 25 veri listelenecektir.Di\u011fer veriler ise, sayfalama yap\u0131larak her bir sayfada 25 veri saklanacak mant\u0131\u011f\u0131yla \u00e7ekilecektir.E\u011fer veritaban\u0131m\u0131zda 25 veriden az veri bulunuyorsa, bunlar direkt olarak tabloda listelenecek.25 ten fazlas\u0131 bulunuyorsa, ilk 25 i al\u0131n\u0131p listelenecek, geri kalan\u0131 sayfalanacakt\u0131r.Her bast\u0131\u011f\u0131m\u0131z sayfada, arkaplanda ki programatik i\u015fleyi\u015fe g\u00f6re bir sonraki 25 veri getirilecektir.<\/p>\n<p>Sayfalama i\u015flemini yapmak i\u00e7in bir HtmlHelper tipinde Extension metod yazaca\u011f\u0131z.Bu s\u0131n\u0131f sayesinde, tablomuzun alt\u0131nda gerekli sayfalama linkleri olu\u015fturulacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public static class HtmlHeplerSayfala\r\n    {\r\n        public static string Sayfala(this HtmlHelper Html, int ToplamSayfa)\r\n        {\r\n            UrlHelper URL = new UrlHelper(Html.ViewContext.RequestContext, Html.RouteCollection);\r\n            \/*\r\n             Bu metodumuz \u00e7ok esnek yap\u0131da olaca\u011f\u0131 i\u00e7in, dinamik olarak kullan\u0131ld\u0131\u011f\u0131 sayfadaki\r\n             controller ve action ad\u0131n\u0131 kendisi alacakt\u0131r.Yukar\u0131daki referans ad\u0131 URL olan\r\n             UrlHelper tipindeki nesnemiz bize adres \u00e7ubu\u011fundaki URL yap\u0131s\u0131n\u0131 d\u00f6necektir.\r\n             *\/\r\n            string ControllerAdi = URL.RequestContext.RouteData.Values&#x5B;&quot;controller&quot;].ToString();\r\n            \/*\r\n             Bu kod ile yap\u0131lan i\u015flem ise, Sayfala metodunun kullan\u0131ld\u0131\u011f\u0131 sayfada URL nesnemize\r\n             gelen URL yap\u0131s\u0131ndaki &quot;controller&quot; de\u011fi\u015fkeninin de\u011ferini al\u0131yoruz.Bu &quot;controller&quot;\r\n             ad\u0131ndaki de\u011fi\u015fkenimiz, Global.asax dosyas\u0131ndaki URL yap\u0131m\u0131zdaki de\u011fi\u015fken ismidir.\r\n             *\/\r\n            int SayfaNumarasi = int.Parse(URL.RequestContext.RouteData.Values&#x5B;&quot;sayfano&quot;].ToString());\r\n            \/*\r\n             Bu sat\u0131rda ise, o anda bulundu\u011fumuz sayfa numaras\u0131n\u0131 elde ediyoruz.&quot;sayfano&quot; de\u011fi\u015fkenimiz\r\n             yaz\u0131m\u0131z\u0131n devam\u0131nda Global.asax dosyas\u0131ndaki URL yap\u0131s\u0131na eklenecektir.\r\n             *\/\r\n\r\n            StringBuilder sb = new StringBuilder();\r\n            \/\/Olu\u015fturaca\u011f\u0131m sayfalama komutlar\u0131n\u0131 olu\u015fturup, bu nesnemizle teker teker birle\u015ftirece\u011fim.\r\n            if (SayfaNumarasi != 1)\r\n            {\r\n                string IlkSayfa = &quot;&lt;a href=&quot; + URL.Action(&quot;&gt;\u0130lk Sayfa&lt;\/a&gt;&quot;;\r\n                \/*E\u011fer sayfa numaram\u0131z 1 de\u011filse, yani ilk sayfada de\u011filsek, &quot;\u0130lk Sayfa&quot; ad\u0131nda bir\r\n                 link olu\u015fturuyorum.Bu metodumuzun kullan\u0131ld\u0131\u011f\u0131 sayfan\u0131n Controller katman\u0131nda ki\r\n                 &quot;Index&quot; ad\u0131ndaki ActionResult tipinden metodumuz g\u00f6sterecektir.Yaz\u0131n\u0131n devam\u0131nda\r\n                 bu metodu da olu\u015fturaca\u011f\u0131z.Ve bu olu\u015fturulan linkin &quot;sayfano&quot; de\u011fi\u015fkenine\r\n                 1 de\u011ferini atayacakt\u0131r.\r\n                 *\/\r\n                sb.Append(IlkSayfa);\r\n                \/\/IlkSayfa de\u011fi\u015fkenimizdeki link yap\u0131s\u0131 StringBuilder nesnemize eklendi.\r\nsb.Append(&quot;|&quot;);\r\n\r\n                string OncekiSayfa = &quot;&lt;a href=&quot; + URL.Action(&quot;&gt;\u00d6nceki Sayfa&lt;\/a&gt;&quot;;\r\n                \/\/Ayno \u015fekilde, bir \u00f6nceki sayfa linkinide olu\u015fturdum.\r\n                sb.Append(OncekiSayfa);\r\n\r\n                sb.Append(&quot;...&amp;nbsp&amp;nbsp&quot;);\r\n                \/\/Sayfa numaralar\u0131n\u0131 yazd\u0131raca\u011f\u0131m\u0131zdan dolay\u0131, biraz bo\u015fluk b\u0131rakt\u0131k.\r\n            }\r\n\r\n            for (int i = (SayfaNumarasi &gt;= 7 ? (SayfaNumarasi - 5) : 1); i &lt; ((SayfaNumarasi + 5) &lt; ToplamSayfa ? (SayfaNumarasi + 5) : ToplamSayfa); i++)\r\n            {\r\n                \/*\r\n                 Sayfalama i\u015fleminde kullanaca\u011f\u0131m\u0131z numaralar\u0131 yazd\u0131r\u0131rken bu for d\u00f6ng\u00fcs\u00fcnden yararlanaca\u011f\u0131z.\r\n                 Burada o anki sayfa numaram\u0131z 7 den b\u00fcy\u00fck ya da e\u015fitse e\u011fer, sayfa numaram\u0131zdan 5 eksik\r\n                 numaradan, sayfa numaralar\u0131n\u0131 yazacakt\u0131r.Aksi durumda 1 rakam\u0131ndan ba\u015flayacakt\u0131r.\r\n\r\n                 Sayfa numaram\u0131z\u0131n 5 fazlas\u0131 toplam sayfa say\u0131s\u0131n\u0131 ge\u00e7miyorsa  e\u011fer, sayfa numaram\u0131z\u0131n 5 fazlas\u0131na\r\n                 kadar d\u00f6ng\u00fcm\u00fcz\u00fc d\u00f6nd\u00fcrece\u011fiz.Aksi durumda, toplam sayfa say\u0131s\u0131na kadar d\u00f6necektir.\r\n                 *\/\r\n\r\n                if (i == SayfaNumarasi)\r\n                {\r\n                    sb.Append(i);\r\n                    \/*\r\n                     O anki bulundu\u011fumuz sayfan\u0131n link de\u011feri yaz\u0131lmas\u0131n.Sadece sayfa numaras\u0131 yazs\u0131n.\r\n                     *\/\r\n                    sb.Append(&quot;&amp;nbsp&amp;nbsp&quot;);\r\n\r\n                    continue;\r\n                    \/\/Di\u011fer sayfalar\u0131 olu\u015fturmas\u0131 i\u00e7in continue edip, bu d\u00f6ng\u00fcn\u00fcn bu seferki ak\u0131\u015f\u0131n\u0131 ba\u015fa al\u0131yorum.\r\n                }\r\n\r\n                var SayfaNumarasiLinki = Html.ActionLink(i.ToString(), &quot;Index&quot;, new { sayfano = i });\r\n                \/*\r\n                 O anki bulundu\u011fumuz sayfa d\u0131\u015f\u0131ndaki linklerimizi olu\u015ftural\u0131m.Html parametremizin\r\n                 ActionLink metodunu kullanmak i\u00e7in System.Web.Mvc.Html k\u00fct\u00fcphanesini sayfam\u0131za\r\n                 eklemeliyiz.\r\n                 *\/\r\n\r\n                sb.Append(SayfaNumarasiLinki);\r\n                sb.Append(&quot;&amp;nbsp&amp;nbsp&quot;);\r\n            }\r\n\r\n            if (SayfaNumarasi != ToplamSayfa)\r\n            {\r\n                sb.Append(&quot;...&amp;nbsp&amp;nbsp&quot;);\r\n                string SonrakiSayfa = &quot;&lt;a href=&quot; + URL.Action(&quot;&gt;Sonraki Sayfa&lt;\/a&gt;&quot;;\r\n                \/\/Sonraki sayfa linkimizi olu\u015fturduk.\r\n                sb.Append(SonrakiSayfa);\r\n\r\n                sb.Append(&quot;|&quot;);\r\n\r\n                string SonSayfa = &quot;&lt;a href=&quot; + URL.Action(&quot;&gt;Son Sayfa&lt;\/a&gt;&quot;;\r\n                \/\/Son sayfa linkimizi de olu\u015fturduk.\r\n                sb.Append(SonSayfa);\r\n            }\r\n\r\n            return sb.ToString();\r\n        }\r\n    }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi Extension metodumuzu olu\u015fturuk.Metod i\u00e7eri\u011fini kodlar aras\u0131nda izah etti\u011fim i\u00e7in burada de\u011finmeyece\u011fim.\u015eimdi bu metodun i\u00e7inde kulland\u0131\u011f\u0131m\u0131z URL de\u011fi\u015fkenleri, Global.asax dosyas\u0131nda bir inceleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            routes.MapRoute(\r\n                &quot;Default&quot;, \/\/ Route name\r\n                &quot;{controller}\/{action}\/{sayfano}\/{id}&quot;, \/\/ URL with parameters\r\n                new { controller = &quot;Home&quot;, action = &quot;Index&quot;, id = UrlParameter.Optional, sayfano = UrlParameter.Optional } \/\/ Parameter defaults\r\n            );\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, &#8220;sayfano&#8221; de\u011fi\u015fkenimizi URL yap\u0131m\u0131z\u0131n i\u00e7ine yerle\u015ftirdik.<\/p>\n<p>\u015eimdi Extension metodumuzu tablomuzun sayfas\u0131nda kullanal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;%= Html.Sayfala(int.Parse(ViewData&#x5B;&quot;ToplamSayfa&quot;].ToString())) %&gt;\r\n<\/pre>\n<p>\u00d6rne\u011fimizde Controller s\u0131n\u0131f\u0131n\u0131 g\u00f6sterme gere\u011fi duymad\u0131m ama \u015funu s\u00f6yleyeyim ki, &#8220;Index&#8221; isimli Action metodu sayesinde tablomuzu olu\u015fturdum.Yukar\u0131daki kodu incelerseniz e\u011fer, ViewData[&#8220;ToplamSayfa&#8221;] de\u011fi\u015fkenine, toplam sayfa de\u011ferini Index Action&#8217;\u0131ndan verece\u011fiz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        VeritabaniDataContext Veri = new VeritabaniDataContext();\r\n\r\n        public ActionResult Index(int sayfano)\r\n        {\r\n            sayfano--;\r\n            int SayfaBoyutu = 25;\r\n            \/\/Her sayfada 25 veri listelenecek.\r\n            int VeriBoyutu = Veri.Verilerims.Count();\r\n            \/\/Ne kadar verimiz oldu\u011funu \u00f6\u011freniyoruz.\r\n            int ToplamSayfa = (int)Math.Ceiling(VeriBoyutu \/ (double)SayfaBoyutu);\r\n            \/\/Bu i\u015flem sayesinde ka\u00e7 adet sayfam\u0131z olaca\u011f\u0131n\u0131 hesaplad\u0131k.\r\n            var List = Veri.Verilerims.Skip(sayfano * SayfaBoyutu).Take(SayfaBoyutu);\r\n            \/*Skip metodu atlama, Take metodu ise alma anlam\u0131na gelmektedir.\r\n             Skip i\u00e7inde belirtilen de\u011fer kadar atla, Take i\u00e7indeki de\u011fer kadar\u0131n\u0131\r\n             al anlam\u0131na geliyor.\r\n             *\/\r\n            ViewData&#x5B;&quot;ToplamSayfa&quot;] = ToplamSayfa;\r\n            return View(List);\r\n        }\r\n<\/pre>\n<p>Yukar\u0131daki kodlar\u0131 incelerseniz e\u011fer, Index Action&#8217;\u0131nda son toplam sayfa de\u011feri hesaplan\u0131p, Extension metoda parametre olan ViewData[&#8220;ToplamSayfa&#8221;] de\u011fi\u015fkenine veriliyor.Art\u0131k b\u00fct\u00fcn i\u015flemlerimiz bitmi\u015ftir.<\/p>\n<p>Projemizi \u00e7al\u0131\u015ft\u0131r\u0131rsak e\u011fer, tablo sayfalaman\u0131n tam k\u0131vam\u0131nda \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6receksiniz.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/mvcde-tablo-sayfalama.html\/sayfalama\" rel=\"attachment wp-att-1246\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1246\" alt=\"sayfalama\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/sayfalama.png\" width=\"579\" height=\"91\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/sayfalama.png 579w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/sayfalama-300x47.png 300w\" sizes=\"auto, (max-width: 579px) 100vw, 579px\" \/><\/a>Bu yaz\u0131m\u0131nda sonuna gelmi\u015f bulunmaktay\u0131z.Art\u0131k MVC&#8217;de rahatl\u0131kla sayfalama i\u015flemlerini yapabilirsiniz.<br \/>\nBir sonraki yaz\u0131mda g\u00f6r\u00fc\u015fene denk ho\u015f\u00e7akal\u0131n.<\/p>\n<p>\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>\u00dczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z bir projenin, herhangi bir sayfas\u0131nda veritaban\u0131ndaki bilgileri, tablolamayla listeletti\u011fimiz zamanlar oluyor.Bu durumlarda veritaban\u0131m\u0131z\u0131n yo\u011funlu\u011funa ba\u011fl\u0131 olarak, verilerin hepsini, an\u0131nda g\u00f6stermekten ziyade, belirli par\u00e7a gruplar halinde listeletip, sayfalama yoluyla bu gruplara ula\u015f\u0131r\u0131z.Bu yaz\u0131m\u0131zda&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[746,283,326,325],"class_list":["post-1239","post","type-post","status-publish","format-standard","hentry","category-asp-net-mvc","tag-asp-net-mvc","tag-mvc","tag-pages","tag-sayfalama"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1239","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=1239"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1239\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=1239"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=1239"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=1239"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}