Entity Framework 4,0 Database First ve ASP.NET 4 Web Forms-Bölüm 3 ' ü kullanmaya başlamaGetting Started with Entity Framework 4.0 Database First and ASP.NET 4 Web Forms - Part 3

Tom Dykstra tarafındanby Tom Dykstra

Contoso Üniversitesi örnek Web uygulaması, 4,0 ve Visual Studio 2010 Entity Framework kullanarak nasıl ASP.NET Web Forms uygulamalar oluşturacağınızı gösterir.The Contoso University sample web application demonstrates how to create ASP.NET Web Forms applications using the Entity Framework 4.0 and Visual Studio 2010. Öğretici serisi hakkında daha fazla bilgi için, serideki ilk öğreticiye bakınFor information about the tutorial series, see the first tutorial in the series

Verileri filtreleme, sıralama ve gruplamaFiltering, Ordering, and Grouping Data

Önceki öğreticide, verileri göstermek ve düzenlemek için EntityDataSource denetimini kullandınız.In the previous tutorial you used the EntityDataSource control to display and edit data. Bu öğreticide, verileri filtreleyecek, sıralarız ve gruplarız.In this tutorial you'll filter, order, and group data. EntityDataSource denetiminin özelliklerini ayarlayarak bunu yaptığınızda söz dizimi diğer veri kaynağı denetimlerinden farklıdır.When you do this by setting properties of the EntityDataSource control, the syntax is different from other data source controls. Ancak gördüğünüz gibi, bu farklılıkları en aza indirmek için QueryExtender denetimini kullanabilirsiniz.As you'll see, however, you can use the QueryExtender control to minimize these differences.

Öğrenciler için filtre uygulamak, ada göre sıralamak ve ad aramak için öğrenciler. aspx sayfasını değiştireceksiniz.You'll change the Students.aspx page to filter for students, sort by name, and search on name. Ayrıca, Kurslar. aspx sayfasını, seçilen departmanın kurslarını görüntüleyecek ve kurs adına göre arayacak şekilde değiştireceksiniz.You'll also change the Courses.aspx page to display courses for the selected department and search for courses by name. Son olarak, About. aspx sayfasına öğrenci istatistiklerini ekleyeceksiniz.Finally, you'll add student statistics to the About.aspx page.

Image02Image02

Image11Image11

Image10Image10

Image14Image14

Verileri filtrelemek için EntityDataSource "Where" özelliğini kullanmaUsing the EntityDataSource "Where" Property to Filter Data

Önceki öğreticide oluşturduğunuz öğrenciler. aspx sayfasını açın.Open the Students.aspx page that you created in the previous tutorial. Şu anda yapılandırıldığı gibi, sayfadaki GridView denetim People varlık kümesindeki tüm adları görüntüler.As currently configured, the GridView control in the page displays all the names from the People entity set. Ancak, yalnızca, null olmayan kayıt tarihleri olan Person varlıkları seçerek bulabileceğiniz öğrencileri göstermek istersiniz.However, you want to show only students, which you can find by selecting Person entities that have non-null enrollment dates.

Tasarım görünümüne geçin ve EntityDataSource denetimi seçin.Switch to Design view and select the EntityDataSource control. Özellikler penceresinde Where özelliğini it.EnrollmentDate is not nullolarak ayarlayın.In the Properties window, set the Where property to it.EnrollmentDate is not null.

Image01Image01

EntityDataSource denetiminin Where özelliğinde kullandığınız sözdizimi Entity SQL.The syntax you use in the Where property of the EntityDataSource control is Entity SQL. Entity SQL Transact-SQL ' e benzer, ancak veritabanı nesneleri yerine varlıklarla birlikte kullanılmak üzere özelleştirilir.Entity SQL is similar to Transact-SQL, but it's customized for use with entities rather than database objects. İfade it.EnrollmentDate is not null, it sözcük, sorgu tarafından döndürülen varlığa bir başvuruyu temsil eder.In the expression it.EnrollmentDate is not null, the word it represents a reference to the entity returned by the query. Bu nedenle it.EnrollmentDate, EntityDataSource denetiminin döndürdüğü Person varlığının EnrollmentDate özelliğine başvurur.Therefore, it.EnrollmentDate refers to the EnrollmentDate property of the Person entity that the EntityDataSource control returns.

Sayfayı çalıştırın.Run the page. Öğrenciler listesi artık yalnızca öğrenciler içeriyor.The students list now contains only students. (Kayıt tarihi olmayan bir satır görüntülenir.)(There are no rows displayed where there's no enrollment date.)

Image02Image02

Verileri sıralamak için EntityDataSource "OrderBy" özelliğini kullanmaUsing the EntityDataSource "OrderBy" Property to Order Data

Bu listenin, ilk görüntülenmesiyle aynı sırada olmasını istersiniz.You also want this list to be in name order when it's first displayed. Öğrenciler. aspx sayfası Tasarım görünümünde hala açıkken ve EntityDataSource denetimi hala seçili durumdayken, Özellikler penceresinde OrderBy özelliğini it.LastNameolarak ayarlayın.With the Students.aspx page still open in Design view, and with the EntityDataSource control still selected, in the Properties window set the OrderBy property to it.LastName.

Image05Image05

Sayfayı çalıştırın.Run the page. Öğrenciler listesi artık son ada göre sırada.The students list is now in order by last name.

Image04Image04

"Where" özelliğini ayarlamak için bir denetim parametresi kullanmaUsing a Control Parameter to Set the "Where" Property

Diğer veri kaynağı denetimlerinde olduğu gibi, Where özelliğine parametre değerleri geçirebilirsiniz.As with other data source controls, you can pass parameter values to the Where property. Öğreticinin 2. bölümünde oluşturduğunuz Kurslar. aspx sayfasında, bir kullanıcının açılan listeden seçtiği departmanla ilişkili kursları göstermek için bu yöntemi kullanabilirsiniz.On the Courses.aspx page that you created in part 2 of the tutorial, you can use this method to display courses that are associated with the department that a user selects from the drop-down list.

Kurslar. aspx ' i açın ve Tasarım görünümüne geçin.Open Courses.aspx and switch to Design view. Sayfaya ikinci bir EntityDataSource denetimi ekleyin ve CoursesEntityDataSourceolarak adlandırın.Add a second EntityDataSource control to the page, and name it CoursesEntityDataSource. SchoolEntities modeline bağlayın ve entitySetName değeri olarak Courses ' ı seçin.Connect it to the SchoolEntities model, and select Courses as the EntitySetName value.

Özellikler penceresinde, WHERE özellik kutusunda üç nokta simgesine tıklayın.In the Properties window, click the ellipsis in the Where property box. ( Özellikler penceresini kullanmadan önce CoursesEntityDataSource denetiminin hala seçili olduğundan emin olun.)(Make sure the CoursesEntityDataSource control is still selected before using the Properties window.)

Image06Image06

Ifade Düzenleyicisi iletişim kutusu görüntülenir.The Expression Editor dialog box is displayed. Bu iletişim kutusunda, belirtilen parametrelere göre WHERE Ifadesini otomatik olarak oluştur' u seçin ve ardından parametre Ekle' ye tıklayın.In this dialog box, select Automatically generate the Where expression based on the provided parameters, and then click Add Parameter. DepartmentIDparametreyi adlandırın, parametre kaynak değeri olarak Denetim ' i seçin ve ControlID değeri olarak DepartmentsDropDownList ' ı seçin.Name the parameter DepartmentID, select Control as the Parameter source value, and select DepartmentsDropDownList as the ControlID value.

Image07Image07

Gelişmiş özellikleri göster' e tıklayın ve ifade Düzenleyicisi iletişim kutusunun Özellikler penceresinde Type özelliğini Int32olarak değiştirin.Click Show advanced properties, and in the Properties window of the Expression Editor dialog box, change the Type property to Int32.

Image15Image15

İşiniz bittiğinde, Tamam’a tıklayın.When you're done, click OK.

Aşağı açılan listenin altında, sayfaya bir GridView denetimi ekleyin ve CoursesGridViewadlandırın.Below the drop-down list, add a GridView control to the page and name it CoursesGridView. CoursesEntityDataSource veri kaynağı denetimine bağlayın, şemayı Yenile' ye tıklayın, Sütunları Düzenle' ye tıklayın ve DepartmentID sütununu kaldırın.Connect it to the CoursesEntityDataSource data source control, click Refresh Schema, click Edit Columns, and remove the DepartmentID column. GridView denetim biçimlendirmesi aşağıdaki örneğe benzer.The GridView control markup resembles the following example.

<asp:GridView ID="CoursesGridView" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="CourseID" DataSourceID="CoursesEntityDataSource">
        <Columns>
            <asp:BoundField DataField="CourseID" HeaderText="ID" ReadOnly="True" 
                SortExpression="CourseID" />
            <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
            <asp:BoundField DataField="Credits" HeaderText="Credits" 
                SortExpression="Credits" />
        </Columns>
    </asp:GridView>

Kullanıcı aşağı açılan listede seçilen departmanı değiştirdiğinde, ilişkili kurslar listesinin otomatik olarak değiştirilmesini istiyorsunuz.When the user changes the selected department in the drop-down list, you want the list of associated courses to change automatically. Bunun gerçekleşmesini sağlamak için açılır listeyi seçin ve Özellikler penceresinde AutoPostBack özelliğini Trueolarak ayarlayın.To make this happen, select the drop-down list, and in the Properties window set the AutoPostBack property to True.

Image08Image08

Tasarımcı 'yı kullanmayı tamamladığınıza göre, kaynak görünümüne geçin ve CoursesEntityDataSource denetiminin ConnectionString ve DefaultContainer adı özelliklerini ContextTypeName="ContosoUniversity.DAL.SchoolEntities" özniteliğiyle değiştirin.Now that you're finished using the designer, switch to Source view and replace the ConnectionString and DefaultContainer name properties of the CoursesEntityDataSource control with the ContextTypeName="ContosoUniversity.DAL.SchoolEntities" attribute. İşiniz bittiğinde, denetim biçimlendirmesi aşağıdaki örneğe benzer şekilde görünür.When you're done, the markup for the control will look like the following example.

<asp:EntityDataSource ID="CoursesEntityDataSource" runat="server" 
        ContextTypeName="ContosoUniversity.DAL.SchoolEntities" EnableFlattening="false"
        EntitySetName="Courses" 
        AutoGenerateWhereClause="true" Where="">
        <WhereParameters>
            <asp:ControlParameter ControlID="DepartmentsDropDownList" Type="Int32" 
                Name="DepartmentID" PropertyName="SelectedValue" />
        </WhereParameters>
    </asp:EntityDataSource>

Sayfayı çalıştırın ve farklı departmanlar seçmek için açılan listeyi kullanın.Run the page and use the drop-down list to select different departments. Yalnızca seçilen departman tarafından sunulan kurslar GridView denetiminde görüntülenir.Only courses that are offered by the selected department are displayed in the GridView control.

Image09Image09

Verileri gruplamak için EntityDataSource "GroupBy" özelliğini kullanmaUsing the EntityDataSource "GroupBy" Property to Group Data

Contoso University 'in, hakkında daha fazla öğrenci-gövde istatistiklerini almak istediğini varsayalım.Suppose Contoso University wants to put some student-body statistics on its About page. Özellikle, kaydolduğu tarihe göre öğrencilerin numaralarının dökümünü göstermek istemektedir.Specifically, it wants to show a breakdown of numbers of students by the date they enrolled.

. Aspx' i açın ve kaynak görünümü ' nde, BodyContent denetiminin varolan içeriğini h2 Etiketler arasında "öğrenci gövdesi istatistikleri" ile değiştirin:Open About.aspx, and in Source view, replace the existing contents of the BodyContent control with "Student Body Statistics" between h2 tags:

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>Student Body Statistics</h2>
</asp:Content>

Başlıktan sonra, EntityDataSource bir denetim ekleyin ve StudentStatisticsEntityDataSourceadlandırın.After the heading, add an EntityDataSource control and name it StudentStatisticsEntityDataSource. SchoolEntitiesbağlayın, People varlık kümesini seçin ve sihirbazdaki Seç kutusunu değiştirmeden bırakın.Connect it to SchoolEntities, select the People entity set, and leave the Select box in the wizard unchanged. Özellikler penceresinde aşağıdaki özellikleri ayarlayın:Set the following properties in the Properties window:

  • Yalnızca öğrencilerle filtrelemek için Where özelliğini it.EnrollmentDate is not nullolarak ayarlayın.To filter for students only, set the Where property to it.EnrollmentDate is not null.
  • Sonuçları kayıt tarihine göre gruplandırmak için GroupBy özelliğini it.EnrollmentDateolarak ayarlayın.To group the results by the enrollment date, set the GroupBy property to it.EnrollmentDate.
  • Kayıt tarihini ve öğrenci sayısını seçmek için Select özelliğini it.EnrollmentDate, Count(it.EnrollmentDate) AS NumberOfStudentsolarak ayarlayın.To select the enrollment date and the number of students, set the Select property to it.EnrollmentDate, Count(it.EnrollmentDate) AS NumberOfStudents.
  • Sonuçları kayıt tarihine göre sıralamak için OrderBy özelliğini it.EnrollmentDateolarak ayarlayın.To order the results by the enrollment date, set the OrderBy property to it.EnrollmentDate.

Kaynak görünümü ' nde, ConnectionString ve DefaultContainer adı özelliklerini bir ContextTypeName özelliği ile değiştirin.In Source view, replace the ConnectionString and DefaultContainer name properties with a ContextTypeName property. EntityDataSource denetim biçimlendirmesi artık aşağıdaki örneğe benzer.The EntityDataSource control markup now resembles the following example.

<asp:EntityDataSource ID="StudentStatisticsEntityDataSource" runat="server" 
        ContextTypeName="ContosoUniversity.DAL.SchoolEntities" EnableFlattening="False" 
        EntitySetName="People"
        Select="it.EnrollmentDate, Count(it.EnrollmentDate) AS NumberOfStudents" 
        OrderBy="it.EnrollmentDate" GroupBy="it.EnrollmentDate"
        Where="it.EnrollmentDate is not null" >
    </asp:EntityDataSource>

Select, GroupByve Where özelliklerinin sözdizimi, geçerli varlığı belirten it anahtar sözcüğü dışında Transact-SQL ' i benzerdir.The syntax of the Select, GroupBy, and Where properties resembles Transact-SQL except for the it keyword that specifies the current entity.

Verileri göstermek için bir GridView denetimi oluşturmak üzere aşağıdaki biçimlendirmeyi ekleyin.Add the following markup to create a GridView control to display the data.

<asp:GridView ID="StudentStatisticsGridView" runat="server" AutoGenerateColumns="False" 
        DataSourceID="StudentStatisticsEntityDataSource">
        <Columns>
            <asp:BoundField DataField="EnrollmentDate" DataFormatString="{0:d}" 
                HeaderText="Date of Enrollment" 
                ReadOnly="True" SortExpression="EnrollmentDate" />
            <asp:BoundField DataField="NumberOfStudents" HeaderText="Students" 
                ReadOnly="True" SortExpression="NumberOfStudents" />
        </Columns>
    </asp:GridView>

Kayıt tarihine göre öğrenci sayısını gösteren bir liste görmek için sayfayı çalıştırın.Run the page to see a list showing the number of students by enrollment date.

Image10Image10

Filtreleme ve sıralama için Querygenişletici denetimini kullanmaUsing the QueryExtender Control for Filtering and Ordering

QueryExtender denetim, İşaretlemede filtreleme ve sıralamayı belirtmenin bir yolunu sağlar.The QueryExtender control provides a way to specify filtering and sorting in markup. Sözdizimi, kullanmakta olduğunuz veritabanı yönetim sistemi 'nden (DBMS) bağımsızdır.The syntax is independent of the database management system (DBMS) you're using. Ayrıca, gezinti özellikleri için kullandığınız söz dizimi Entity Framework benzersiz olan özel durum ile, genellikle Entity Framework bağımsızdır.It's also generally independent of the Entity Framework, with the exception that syntax you use for navigation properties is unique to the Entity Framework.

Öğreticinin bu bölümünde, verileri filtrelemek ve sıralamak için bir QueryExtender denetimi kullanacaksınız ve order by alanlarından biri bir gezinti özelliği olacaktır.In this part of the tutorial you'll use a QueryExtender control to filter and order data, and one of the order-by fields will be a navigation property.

(EntityDataSource denetimi tarafından otomatik olarak oluşturulan sorguları genişletmek için biçimlendirme yerine kodu kullanmayı tercih ediyorsanız, bunu QueryCreated olayını işleyerek yapabilirsiniz.(If you prefer to use code instead of markup to extend the queries that are automatically generated by the EntityDataSource control, you can do that by handling the QueryCreated event. QueryExtender denetimi, EntityDataSource denetim sorgularını de genişletmektedir.)This is how the QueryExtender control extends EntityDataSource control queries also.)

Kurslar. aspx sayfasını açın ve daha önce eklediğiniz biçimlendirmenin altında, bir başlık oluşturmak için aşağıdaki biçimlendirmeyi, arama dizeleri girmeye yönelik bir metin kutusunu, bir arama düğmesini ve Courses varlık kümesine bağlanan EntityDataSource denetimini ekleyin.Open the Courses.aspx page, and below the markup you added previously, insert the following markup to create a heading, a text box for entering search strings, a search button, and an EntityDataSource control that's bound to the Courses entity set.

<h2>Courses by Name</h2>
    Enter a course name 
    <asp:TextBox ID="SearchTextBox" runat="server"></asp:TextBox>
     <asp:Button ID="SearchButton" runat="server" Text="Search" />
    <br /><br />
    <asp:EntityDataSource ID="SearchEntityDataSource" runat="server" 
        ContextTypeName="ContosoUniversity.DAL.SchoolEntities" EnableFlattening="False" 
        EntitySetName="Courses"  
        Include="Department" >
    </asp:EntityDataSource>

EntityDataSource denetiminin Include özelliğinin Departmentolarak ayarlandığını unutmayın.Notice that the EntityDataSource control's Include property is set to Department. Veritabanında, Course tablosu departman adını içermez; DepartmentID yabancı anahtar sütunu içerir.In the database, the Course table does not contain the department name; it contains a DepartmentID foreign key column. Veritabanını doğrudan sorguladığınız takdirde, Bölüm adını kurs verileriyle birlikte almak için Course ve Department tablolarına katılmanız gerekir.If you were querying the database directly, to get the department name along with course data, you would have to join the Course and Department tables. Include özelliğini Departmentolarak ayarlayarak, Entity Framework bir Course varlığı aldığında ilgili Department varlığı alma işini yapması gerektiğini belirtirsiniz.By setting the Include property to Department, you specify that the Entity Framework should do the work of getting the related Department entity when it gets a Course entity. Department varlık daha sonra Course varlığının Department gezinti özelliğinde depolanır.The Department entity is then stored in the Department navigation property of the Course entity. (Varsayılan olarak, veri modeli Tasarımcısı tarafından oluşturulan SchoolEntities sınıfı, gerektiğinde ilgili verileri alır ve veri kaynağı denetimini bu sınıfa bağlamışsanız, Include özelliğinin ayarlanması gerekli değildir.(By default, the SchoolEntities class that was generated by the data model designer retrieves related data when it's needed, and you've bound the data source control to that class, so setting the Include property is not necessary. Ancak, Entity Framework, bu sayfanın performansını artırır, aksi takdirde Course varlıklar ve ilgili Department varlıkları için verileri almak üzere veritabanına ayrı çağrılar yapacağından.)However, setting it improves performance of the page, because otherwise the Entity Framework would make separate calls to the database to retrieve data for the Course entities and for the related Department entities.)

Yeni oluşturduğunuz EntityDataSource denetiminden sonra, bu EntityDataSource denetimine bağlanan QueryExtender bir denetim oluşturmak için aşağıdaki biçimlendirmeyi ekleyin.After the EntityDataSource control you just created, insert the following markup to create a QueryExtender control that's bound to that EntityDataSource control.

<asp:QueryExtender ID="SearchQueryExtender" runat="server" 
        TargetControlID="SearchEntityDataSource" >
        <asp:SearchExpression SearchType="StartsWith" DataFields="Title">
            <asp:ControlParameter ControlID="SearchTextBox" />
        </asp:SearchExpression>
        <asp:OrderByExpression DataField="Department.Name" Direction="Ascending">
            <asp:ThenBy DataField="Title" Direction="Ascending" />            
        </asp:OrderByExpression>
    </asp:QueryExtender>

SearchExpression öğesi, başlıkları metin kutusuna girilen değerle eşleşen kurslar seçmek istediğinizi belirtir.The SearchExpression element specifies that you want to select courses whose titles match the value entered in the text box. SearchType özelliği StartsWithbelirttiğinden, yalnızca metin kutusuna girilen sayıda karakter karşılaştırılacaktır.Only as many characters as are entered in the text box will be compared, because the SearchType property specifies StartsWith.

OrderByExpression öğesi, sonuç kümesinin, Bölüm adı içindeki kurs başlığına göre sipariş olacağını belirtir.The OrderByExpression element specifies that the result set will be ordered by course title within department name. Bölüm adının nasıl belirtildiğine dikkat edin: Department.Name.Notice how department name is specified: Department.Name. Course varlık ve Department varlık arasındaki ilişki bire bir, Department gezinti özelliği bir Department varlığı içerir.Because the association between the Course entity and the Department entity is one-to-one, the Department navigation property contains a Department entity. (Bu bir-çok ilişkisi ise, özelliği bir koleksiyon içerir.) Bölüm adını almak için Department varlığının Name özelliğini belirtmeniz gerekir.(If this were a one-to-many relationship, the property would contain a collection.) To get the department name, you must specify the Name property of the Department entity.

Son olarak, kurslar listesini göstermek için bir GridView denetimi ekleyin:Finally, add a GridView control to display the list of courses:

<asp:GridView ID="SearchGridView" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="CourseID" DataSourceID="SearchEntityDataSource"  AllowPaging="true">
        <Columns>
            <asp:TemplateField HeaderText="Department">
                <ItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%# Eval("Department.Name") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="CourseID" HeaderText="ID"/>
            <asp:BoundField DataField="Title" HeaderText="Title" />
            <asp:BoundField DataField="Credits" HeaderText="Credits" />
        </Columns>
    </asp:GridView>

İlk sütun, Bölüm adını görüntüleyen bir şablon alanıdır.The first column is a template field that displays the department name. Veri bağlama ifadesi, tıpkı QueryExtender denetiminde gördüğünüz gibi Department.Namebelirtir.The databinding expression specifies Department.Name, just as you saw in the QueryExtender control.

Sayfayı çalıştırın.Run the page. İlk ekran, bölüm ve ardından kurs başlığına göre sırasıyla tüm kursların bir listesini gösterir.The initial display shows a list of all courses in order by department and then by course title.

Image11Image11

Başlıkları "d" ile başlayan tüm kursları görmek için "d" girin ve Ara ' ya tıklayın (arama büyük/küçük harfe duyarlı değildir).Enter an "m" and click Search to see all courses whose titles begin with "m" (the search is not case sensitive).

Image12Image12

Verileri filtrelemek için "Like" Işlecini kullanmaUsing the "Like" Operator to Filter Data

Like denetiminin EntityDataSource özelliğinde bir Where işleci kullanarak QueryExtender denetiminin StartsWith, Containsve EndsWith arama türlerine benzer bir efekt elde edebilirsiniz.You can achieve an effect similar to the QueryExtender control's StartsWith, Contains, and EndsWith search types by using a Like operator in the EntityDataSource control's Where property. Öğreticinin bu bölümünde, ada göre bir öğrenci aramak için Like işlecini nasıl kullanacağınızı göreceksiniz.In this part of the tutorial, you'll see how to use the Like operator to search for a student by name.

Kaynak görünümünde öğrenciler. aspx ' i açın.Open Students.aspx in Source view. GridView denetiminden sonra aşağıdaki biçimlendirmeyi ekleyin:After the GridView control, add the following markup:

<h2>Find Students by Name</h2>
    Enter any part of the name
    <asp:TextBox ID="SearchTextBox" runat="server" AutoPostBack="true"></asp:TextBox>
     <asp:Button ID="SearchButton" runat="server" Text="Search" />
    <br />
    <br />
    <asp:EntityDataSource ID="SearchEntityDataSource" runat="server" 
        ContextTypeName="ContosoUniversity.DAL.SchoolEntities" EnableFlattening="False" 
        EntitySetName="People"
        Where="it.EnrollmentDate is not null and (it.FirstMidName Like '%' + @StudentName + '%' or it.LastName Like '%' + @StudentName + '%')" >
        <WhereParameters>
            <asp:ControlParameter ControlID="SearchTextBox" Name="StudentName" PropertyName="Text" 
             Type="String" DefaultValue="%"/>
        </WhereParameters>
    </asp:EntityDataSource>
    <asp:GridView ID="SearchGridView" runat="server" AutoGenerateColumns="False" DataKeyNames="PersonID"
        DataSourceID="SearchEntityDataSource" AllowPaging="true">
        <Columns>
            <asp:TemplateField HeaderText="Name" SortExpression="LastName, FirstMidName">
                <ItemTemplate>
                    <asp:Label ID="LastNameFoundLabel" runat="server" Text='<%# Eval("LastName") %>'></asp:Label>, 
                    <asp:Label ID="FirstNameFoundLabel" runat="server" Text='<%# Eval("FirstMidName") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Enrollment Date" SortExpression="EnrollmentDate">
                <ItemTemplate>
                    <asp:Label ID="EnrollmentDateFoundLabel" runat="server" Text='<%# Eval("EnrollmentDate", "{0:d}") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

Bu biçimlendirme, Where Özellik değeri dışında daha önce gördüğünüze benzerdir.This markup is similar to what you've seen earlier except for the Where property value. Where ifadesinin ikinci bölümü, metin kutusuna her şey için hem ilk hem de soyadlarını arayan bir alt dize aramasını (LIKE %FirstMidName% or LIKE %LastName%) tanımlar.The second part of the Where expression defines a substring search (LIKE %FirstMidName% or LIKE %LastName%) that searches both the first and last names for whatever is entered in the text box.

Sayfayı çalıştırın.Run the page. Başlangıçta tüm öğrencileri görürsünüz çünkü StudentName parametresi için varsayılan değer "%".Initially you see all of the students because the default value for the StudentName parameter is "%".

Image13Image13

Metin kutusuna "g" harfini girin ve Ara' ya tıklayın.Enter the letter "g" in the text box and click Search. Adında "g" olan öğrencilerin bir listesini görürsünüz.You see a list of students that have a "g" in either the first or last name.

Image14Image14

Artık tek tek tablolardan, güncelleştirilmiş, filtrelenmiş, sıralanmış ve gruplandırılmış verileri görüntüdiniz.You've now displayed, updated, filtered, ordered, and grouped data from individual tables. Sonraki öğreticide ilgili verilerle (ana ayrıntı senaryolarında) çalışmaya başlayabilirsiniz.In the next tutorial you'll begin to work with related data (master-detail scenarios).