"Enter"a basıp içeriğe geçin

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

 

4 Yorum

  1. samet samet

    Merhaba,
    listeleme kısmında ad soyada bastıgım zaman aradıgım kelime dısında baska alanlarda getiriyor yani tüm kayıtları getiriyor lsteleme yapmak istediğim zaman neden?

  2. erenali erenali

    merhaba, yazdığınız kelime ad soyadda ki kelimelerin içinde varsa da getirir.Yani kelime eşleştirme değil içinde arama işlemi yapmaktadır. O yüzden daha fazla kayıt getirilmektedir.

  3. Mustafa Mustafa

    Merhaba, Hocam çok işime yaradı, çok teşekkür ederim paylaşımınız için.

  4. davut davut

    Tarihe göre nasıl filtreleme yapabiliriz?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.