asp.net mvc listede sıralama ,arama yapma ve sayfalama (sorting, search,paging)

index.cshtml dosyasında

@using (Html.BeginForm())
{
<p>
Arama Yap: @Html.TextBox(“SearchString”)
<input type=”submit” value=”Search” />
</p>
}

Arama yapabileceğimiz textbox için yukarıdaki  kısmı koda ekliyoruz.

Listeleme yapacağımız başlıklar içinde aşağıdaki şekilde listenin başlıklarını güncelliyoruz. Her başlık için ayrı bir tanımlama yaptık.

<th>
@Html.ActionLink(“Modul”, “Index”, new { Sorting_Order = ViewBag.SortingModul })
</th>
<th>
@Html.ActionLink(“Ad Soyad”, “Index”, new { Sorting_Order = ViewBag.SortingName })
</th>
<th>
@Html.ActionLink(“Zaman”, “Index”, new { Sorting_Order = ViewBag.SortingTime })
</th>
<th>
@Html.DisplayNameFor(model => model.mail)
</th>
</th>

Şimdi işlemlerimizde controller ın index actionında devam ediyoruz.

var olan index actionımızı aşağıdaki şekilde güncelliyoruz.

public ActionResult Index(string Sorting_Order, string SearchString)
{
ViewBag.SortingModul = String.IsNullOrEmpty(Sorting_Order) ? “Module_Gore” : “”;
ViewBag.SortingTime = String.IsNullOrEmpty(Sorting_Order) ? “Zamana_Gore” : “”;
ViewBag.SortingName = String.IsNullOrEmpty(Sorting_Order) ? “Ada_Gore” : “”;
var kayitlar = from a in db.sayfalar_logtut select a;
if (!String.IsNullOrEmpty(SearchString))
{
kayitlar = kayitlar.Where(a => a.adsoyad.Contains(SearchString) || a.mail.Contains(SearchString));
}
switch (Sorting_Order)
{
case “Module_Gore”:
kayitlar = kayitlar.OrderBy(sayfalar_logtut => sayfalar_logtut.modul);
break;
case “Zamana_Gore”:
kayitlar = kayitlar.OrderBy(sayfalar_logtut => sayfalar_logtut.zaman);
break;
case “Ada_Gore”:
kayitlar = kayitlar.OrderBy(sayfalar_logtut => sayfalar_logtut.adsoyad);
break;
default:
kayitlar = kayitlar.OrderByDescending(sayfalar_logtut => sayfalar_logtut.zaman);
break;
}
// return View(db.sayfalar_logtut.ToList());
return View(kayitlar.ToList());
}

Sorting_Order ile orderdan gelecek olan bilgiye göre switch koduna giricek ve ona göre veritabanından listeli olarak verileri alacak.

SearchString ile search textboxundan gelecek veriye göre where şartı yazarak tablodaki verileri filtreleyecek.

sayfalar_logtut benim tablomun model ismi.

 

1 Screenshot_1

 

Sayfalama yaptırabilmemiz için Tools menüsü içindeki  Library Package Manager  seçeneğinden Package Manager Console u seçerek sayfanın alt tarafından consolun açılmasını sağlayalım.

Install-Package PagedList.Mvc    komutu ile sayfalamada kullanacağımız paketi yükleyelim.

paging1

Başarılı bir şekilde yükleme tamamlandıysa,

controller dosyamıza aşağıdaki kodu ekliyoruz.

using PagedList;

ve controller içindeki index action ımızı aşağıdaki şekilde güncelliyoruz.

public ViewResult Index(string Sorting_Order, string SearchString, string currentFilter, int? page)
{
ViewBag.SortingModul = String.IsNullOrEmpty(Sorting_Order) ? “Module_Gore” : “”;
ViewBag.SortingTime = String.IsNullOrEmpty(Sorting_Order) ? “Zamana_Gore” : “”;
ViewBag.SortingName = String.IsNullOrEmpty(Sorting_Order) ? “Ada_Gore” : “”;
ViewBag.CurrentSort = Sorting_Order;
if (SearchString != null)
  { page = 1; }
else
  { SearchString = currentFilter; }
ViewBag.CurrentFilter = SearchString;
var kayitlar = from a in db.sayfalar_logtut select a;
if (!String.IsNullOrEmpty(SearchString))
{
kayitlar = kayitlar.Where(a => a.adsoyad.Contains(SearchString) || a.mail.Contains(SearchString));
}

switch (Sorting_Order)
{
case “Module_Gore”:
kayitlar = kayitlar.OrderBy(sayfalar_logtut => sayfalar_logtut.modul);
break;
case “Zamana_Gore”:
kayitlar = kayitlar.OrderBy(sayfalar_logtut => sayfalar_logtut.zaman);
break;
case “Ada_Gore”:
kayitlar = kayitlar.OrderBy(sayfalar_logtut => sayfalar_logtut.adsoyad);
break;
default:
kayitlar = kayitlar.OrderByDescending(sayfalar_logtut => sayfalar_logtut.zaman);
break;
}

ViewBag.HtmlStr = kayitlar.Count();
int pageSize = 25;
int pageNumber = (page ?? 1);
return View(kayitlar.ToPagedList(pageNumber, pageSize));
}

index.cshtml dosyamızı da aşağıdaki şekilde güncelliyoruz.

@model PagedList.IPagedList<LogTut.Models.sayfalar_logtut>
@using PagedList.Mvc;
<link href=”~/Content/PagedList.css” rel=”stylesheet” type=”text/css” />
@{
ViewBag.Title = “Sayfalardan İşlem Yapanlar”;
}
<h2>İşlemler</h2>
<p>
@using (Html.BeginForm(“Index”, “SayfalarLog”, FormMethod.Get))
{
<p>
Arama Yap: @Html.TextBox(“SearchString”, ViewBag.CurrentFilter as string)
<input type=”submit” value=”Search” />
</p>
}
</p>
<table>
<tr>
<th>
@Html.ActionLink(“Modul”, “Index”, new { Sorting_Order = ViewBag.SortingModul, currentFilter=ViewBag.CurrentFilter})
</th>
<th>
@Html.ActionLink(“Ad Soyad”, “Index”, new { Sorting_Order = ViewBag.SortingName, currentFilter=ViewBag.CurrentFilter})
</th>
<th>
@Html.ActionLink(“Zaman”, “Index”, new { Sorting_Order = ViewBag.SortingTime, currentFilter=ViewBag.CurrentFilter})
</th>
<th>
@Html.ActionLink(“Mail”, “Index”)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.modul)
</td>
<td>
@Html.DisplayFor(modelItem => item.adsoyad)
</td>
<td>
@Html.DisplayFor(modelItem => item.zaman)
</td>
<td>
@Html.DisplayFor(modelItem => item.mail)
</td>
<td>
@Html.ActionLink(“Details”, “Details”, new { id=item.id })
</td>
</tr>
}
</table>
<br />
@(Html.Raw(ViewBag.HtmlStr)) sonuç
<br />
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) / @Model.PageCount
@Html.PagedListPager(Model, page => Url.Action(“Index”,
new { page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter }))

Bu şekilde yapılan bir kodlamayla filtreleme sayfalama ve sıralamanın tamamı yapılmaktadır.

son1                                      son2