Model bağlama ve web formlarıyla verileri sıralama, sayfalama ve filtreleme

yazan: Tom FitzMacken

Bu öğretici serisi, bir ASP.NET Web Forms projesiyle model bağlama kullanmanın temel yönlerini gösterir. Model bağlama, veri etkileşiminin veri kaynağı nesneleriyle (ObjectDataSource veya SqlDataSource gibi) ilgilenmekten daha düz olmasını sağlar. Bu seri tanıtım malzemeleriyle başlar ve sonraki öğreticilerde daha gelişmiş kavramlara geçer.

Bu öğreticide, model bağlama aracılığıyla verilerin nasıl sıralanacağını, sayfalanacağını ve filtreleneceğini gösterir.

Bu öğretici, serinin ilk bölümünde oluşturulan projeyi oluşturur.

Projenin tamamını C# veya VB olarak indirebilirsiniz . İndirilebilir kod Visual Studio 2012 veya Visual Studio 2013 ile çalışır. Bu öğreticide gösterilen Visual Studio 2013 şablonundan biraz farklı olan Visual Studio 2012 şablonunu kullanır.

Oluşturacaklarınız

Bu öğreticide şunları yapacaksınız:

  1. Verileri sıralamayı ve sayfalandırmayı etkinleştirme
  2. Kullanıcı tarafından yapılan bir seçime göre verilerin filtrelenmesine izin ver

Sıralama ekleme

GridView'da sıralamayı etkinleştirmek çok kolaydır. Student.aspx dosyasında, GridView'da AllowSorting değerini true olarak ayarlamanız yeterlidir. DataField otomatik olarak kullanıldığından her sütun için bir SortExpression değeri ayarlamanız gerekmez. GridView, sorguyu verileri seçilen değere göre sıralamayı içerecek şekilde değiştirir. Aşağıdaki vurgulanan kodda sıralamayı etkinleştirmek için yapmanız gereken ekleme gösterilir.

<asp:GridView runat="server" ID="studentsGrid"
    ItemType="ContosoUniversity.Models.Student" DataKeyNames="StudentID"
    SelectMethod="studentsGrid_GetData"
    UpdateMethod="studentsGrid_UpdateItem" DeleteMethod="studentsGrid_DeleteItem"
    AllowSorting="true" 
    AutoGenerateEditButton="true" AutoGenerateDeleteButton="true"  
    AutoGenerateColumns="false">
  <Columns>
    <asp:DynamicField DataField="StudentID" />
    <asp:DynamicField DataField="LastName" />
    <asp:DynamicField DataField="FirstName" />
    <asp:DynamicField DataField="Year" />
    <asp:TemplateField HeaderText="Total Credits">
      <ItemTemplate>
        <asp:Label Text="<%# Item.Enrollments.Sum(en => en.Course.Credits) %>"
            runat="server" />
      </ItemTemplate>
    </asp:TemplateField>        
  </Columns>
</asp:GridView>

Web uygulamasını çalıştırın ve öğrenci kayıtlarını farklı sütunlardaki değerlere göre sıralamayı test edin.

öğrencileri sıralama

Sayfalama ekleme

Sayfalama özelliğini etkinleştirmek de çok kolaydır. GridView'da AllowPaging özelliğini true olarak ayarlayın ve PageSize özelliğini her sayfada görüntülemek istediğiniz kayıt sayısına ayarlayın. Bu öğreticide 4 olarak ayarlayabilirsiniz.

<asp:GridView runat="server" ID="studentsGrid"
    ItemType="ContosoUniversity.Models.Student" DataKeyNames="StudentID"
    SelectMethod="studentsGrid_GetData"
    UpdateMethod="studentsGrid_UpdateItem" DeleteMethod="studentsGrid_DeleteItem"
    AllowSorting="true" AllowPaging="true" PageSize="4"
    AutoGenerateEditButton="true" AutoGenerateDeleteButton="true"  
    AutoGenerateColumns="false">

Web uygulamasını çalıştırın ve artık kayıtların tek bir sayfada 4'ten fazla kayıt görüntülenmeden birden çok sayfaya bölündüğüne dikkat edin.

sayfalama ekleme

Ertelenen sorgu yürütme, uygulama verimliliğini artırır. GridView, veri kümesinin tamamını almak yerine sorguyu yalnızca geçerli sayfanın kayıtlarını alacak şekilde değiştirir.

Kayıtları kullanıcı seçimine göre filtreleme

Model bağlama, bir model bağlama yönteminde parametrenin değerinin nasıl ayarlandığını belirlemenizi sağlayan çeşitli öznitelikler ekler. Bu öznitelikler System.Web.ModelBinding ad alanındadır. Bunlara aşağıdakiler dahildir:

  • Denetim
  • Çerez
  • Form
  • Profil
  • QueryString
  • Routedata
  • Oturum
  • UserProfile
  • Viewstate

Bu öğreticide, GridView'da hangi kayıtların görüntüleneceğini filtrelemek için bir denetimin değerini kullanacaksınız. Control özniteliğini daha önce oluşturduğunuz sorgu yöntemine ekleyebilirsiniz. Sonraki bir öğreticide, parametre değerinin bir sorgu dizesi değerinden geldiğini belirtmek için bir parametreye QueryString özniteliğini uygulayacaksınız.

İlk olarak ValidationSummary'nin üstüne, hangi öğrencilerin gösterileceğini filtrelemek için bir açılan liste ekleyin.

<asp:HyperLink runat="server" NavigateUrl="~/AddStudent" Text="Add New Student" />

<br /><br />
<asp:Label runat="server" Text="Show:" />
<asp:DropDownList runat="server" AutoPostBack="true" ID="DisplayYear">
    <asp:ListItem Text="All" Value="" />
    <asp:ListItem Text="Freshman" />
    <asp:ListItem Text="Sophomore" />
    <asp:ListItem Text="Junior" />
    <asp:ListItem Text="Senior" />
</asp:DropDownList>

<asp:ValidationSummary runat="server" ShowModelStateErrors="true"/>

Arka planda kod dosyasında select yöntemini değiştirerek denetimden bir değer alın ve parametrenin adını değeri sağlayan denetimin adına ayarlayın.

Control özniteliğini çözümlemek için System.Web.ModelBinding ad alanı için bir using deyimi eklemeniz gerekir.

using System.Web.ModelBinding;

Aşağıdaki kod, döndürülen verileri açılan listenin değerine göre filtrelemek için yeniden çalışan select yöntemini gösterir. Parametreden önce denetim özniteliği eklemek, bu parametrenin değerinin aynı ada sahip bir denetimden geldiğini belirtir.

public IQueryable<Student> studentsGrid_GetData([Control] AcademicYear? displayYear)
{
    SchoolContext db = new SchoolContext();
    var query = db.Students.Include(s => s.Enrollments.Select(e => e.Course));

    if (displayYear != null)
    {
        query = query.Where(s => s.Year == displayYear);   
    }

    return query;    
}

Öğrenci listesini filtrelemek için web uygulamasını çalıştırın ve açılan listeden farklı değerler seçin.

öğrencileri filtreleme

Sonuç

Bu öğreticide, verilerin sıralanması ve sayfalanması etkinleştirildi. Ayrıca verileri bir denetimin değerine göre filtrelemeyi etkinleştirmişsinizdir.

Sonraki öğreticide bir JQuery kullanıcı arabirimi pencere öğesini dinamik veri şablonuyla tümleştirerek kullanıcı arabirimini geliştireceksiniz.