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.
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.
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.
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?
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.
Merhaba, Hocam çok işime yaradı, çok teşekkür ederim paylaşımınız için.
Tarihe göre nasıl filtreleme yapabiliriz?