Nell'esercitazione precedente è stato usato il EntityDataSource controllo per visualizzare e modificare i dati. In questa esercitazione verranno filtrati, ordinati e raggruppati i dati. Quando si esegue questa operazione impostando le proprietà del EntityDataSource controllo, la sintassi è diversa da altri controlli origine dati. Come si vedrà, tuttavia, è possibile usare il QueryExtender controllo per ridurre al minimo queste differenze.
La pagina Students.aspx verrà modificata per filtrare gli studenti, ordinare in base al nome e cercare il nome. Si cambierà anche la pagina Courses.aspx per visualizzare i corsi per il reparto selezionato e cercare corsi in base al nome. Infine, si aggiungeranno le statistiche degli studenti alla pagina About.aspx .
Uso della proprietà EntityDataSource "Where" per filtrare i dati
Aprire la pagina Students.aspx creata nell'esercitazione precedente. Come configurato, il GridView controllo nella pagina visualizza tutti i nomi del People set di entità. Tuttavia, si vuole mostrare solo gli studenti, che è possibile trovare selezionando Person entità con date di registrazione non null.
Passare alla visualizzazione Progettazione e selezionare il EntityDataSource controllo. Nella finestra Proprietà impostare la proprietà Where su it.EnrollmentDate is not null.
La sintassi usata nella Where proprietà del EntityDataSource controllo è Entity SQL. Entity SQL è simile a Transact-SQL, ma viene personalizzato per l'uso con entità anziché con oggetti di database. Nell'espressione it.EnrollmentDate is not null, la parola it rappresenta un riferimento all'entità restituita dalla query. Pertanto, it.EnrollmentDate fa riferimento alla EnrollmentDate proprietà dell'entità Person restituita dal EntityDataSource controllo.
Eseguire la pagina. L'elenco degli studenti contiene solo studenti. Non sono visualizzate righe in cui non è presente alcuna data di registrazione.
Uso della proprietà EntityDataSource "OrderBy" per ordinare i dati
Si vuole anche che questo elenco sia in ordine di nome quando viene visualizzato per la prima volta. Con la pagina Students.aspx ancora aperta nella visualizzazione Progettazione e con il EntityDataSource controllo ancora selezionato, nella finestra Proprietà impostare la proprietà OrderBy su it.LastName.
Eseguire la pagina. L'elenco degli studenti è ora in ordine per cognome.
Uso di un parametro di controllo per impostare la proprietà "Where"
Come per altri controlli origine dati, è possibile passare i valori dei parametri alla Where proprietà. Nella pagina Courses.aspx creata nella parte 2 dell'esercitazione è possibile usare questo metodo per visualizzare i corsi associati al reparto selezionato dall'elenco a discesa.
Aprire Courses.aspx e passare alla visualizzazione Progettazione . Aggiungere un secondo EntityDataSource controllo alla pagina e denominarlo CoursesEntityDataSource. Connettersi al SchoolEntities modello e selezionare Courses come valore EntitySetName .
Nella finestra Proprietà fare clic sui puntini di sospensione nella casella Where property . Assicurarsi che il controllo sia ancora selezionato prima di usare la CoursesEntityDataSource finestra Proprietà .
Viene visualizzata la finestra di dialogo Editor espressioni . In questa finestra di dialogo selezionare Genera automaticamente l'espressione Where in base ai parametri specificati e quindi fai clic su Aggiungi parametro. Assegnare un nome al parametro DepartmentID, selezionare Controllo come valore di origine parametro e selezionare DepartmentsDropDownList come valore ControlID .
Fare clic su Mostra proprietà avanzate e nella finestra Proprietà della finestra di dialogo Editor espressioni modificare la Type proprietà in Int32.
Al termine, fare clic su OK.
Sotto l'elenco a discesa aggiungere un GridView controllo alla pagina e denominarlo CoursesGridView. Connettersi al CoursesEntityDataSource controllo origine dati, fare clic su Aggiorna schema, fare clic su Modifica colonne e rimuovere la DepartmentID colonna. Il markup del GridView controllo è simile all'esempio seguente.
Quando l'utente modifica automaticamente il reparto selezionato nell'elenco a discesa, si vuole che l'elenco dei corsi associati cambi automaticamente. Per eseguire questa operazione, selezionare l'elenco a discesa e nella finestra Proprietà impostare la AutoPostBack proprietà su True.
Dopo aver completato l'uso della finestra di progettazione, passare alla visualizzazione Origine e sostituire le ConnectionString proprietà e DefaultContainer del nome del CoursesEntityDataSource controllo con l'attributo ContextTypeName="ContosoUniversity.DAL.SchoolEntities" . Al termine, il markup per il controllo sarà simile all'esempio seguente.
Eseguire la pagina e usare l'elenco a discesa per selezionare diversi reparti. Nel controllo vengono visualizzati GridView solo i corsi offerti dal reparto selezionato.
Uso della proprietà EntityDataSource "GroupBy" per raggruppare i dati
Si supponga che Contoso University voglia inserire alcune statistiche sul corpo degli studenti nella relativa pagina Informazioni. In particolare, vuole mostrare una suddivisione dei numeri di studenti entro la data di iscrizione.
Aprire About.aspx e nella visualizzazione Origine sostituire il contenuto esistente del BodyContent controllo con "Student Body Statistics" tra h2 i tag:
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<h2>Student Body Statistics</h2>
</asp:Content>
Dopo l'intestazione, aggiungere un EntityDataSource controllo e denominarlo StudentStatisticsEntityDataSource. Connettersi a SchoolEntities, selezionare il set di entità e lasciare invariata la People casella Seleziona nella procedura guidata. Impostare le proprietà seguenti nella finestra Proprietà :
Per filtrare solo gli studenti, impostare la Where proprietà su it.EnrollmentDate is not null.
Per raggruppare i risultati in base alla data di registrazione, impostare la GroupBy proprietà su it.EnrollmentDate.
Per selezionare la data di registrazione e il numero di studenti, impostare la Select proprietà su it.EnrollmentDate, Count(it.EnrollmentDate) AS NumberOfStudents.
Per ordinare i risultati in base alla data di registrazione, impostare la OrderBy proprietà su it.EnrollmentDate.
Nella visualizzazione Origine sostituire le ConnectionString proprietà e DefaultContainer nome con una ContextTypeName proprietà. Il markup del EntityDataSource controllo ora è simile all'esempio seguente.
<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>
La sintassi delle proprietà , GroupBye Where è simile a Transact-SQL, ad eccezione it della Selectparola chiave che specifica l'entità corrente.
Aggiungere il markup seguente per creare un GridView controllo per visualizzare i dati.
Eseguire la pagina per visualizzare un elenco che mostra il numero di studenti in base alla data di registrazione.
Uso del controllo QueryExtender per il filtro e l'ordinamento
Il controllo consente di specificare il filtro e l'ordinamento QueryExtender nel markup. La sintassi è indipendente dal sistema di gestione del database (DBMS) in uso. È anche in genere indipendente da Entity Framework, con l'eccezione che la sintassi usata per le proprietà di spostamento è univoca per Entity Framework.
In questa parte dell'esercitazione si userà un QueryExtender controllo per filtrare e ordinare i dati e uno dei campi order-by sarà una proprietà di spostamento.
Se si preferisce usare il codice anziché il markup per estendere le query generate automaticamente dal controllo, è possibile gestire l'evento EntityDataSourceQueryCreated . Questo è il modo in cui il QueryExtender controllo estende EntityDataSource anche le query di controllo.
Aprire la pagina Courses.aspx e sotto il markup aggiunto in precedenza, inserire il markup seguente per creare un'intestazione, una casella di testo per immettere stringhe di ricerca, un pulsante di ricerca e un EntityDataSource controllo associato al Courses set di entità.
<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>
Si noti che la EntityDataSource proprietà del Include controllo è impostata su Department. Nel database la Course tabella non contiene il nome del reparto. Contiene una DepartmentID colonna chiave esterna. Se si esegue una query diretta sul database, per ottenere il nome del reparto insieme ai dati del corso, è necessario aggiungere le Course tabelle e Department . Impostando la Include proprietà su Department, si specifica che Entity Framework deve eseguire il lavoro di ottenere l'entità correlata Department quando ottiene un'entità Course . L'entità Department viene quindi archiviata nella Department proprietà di spostamento dell'entità Course . Per impostazione predefinita, la SchoolEntities classe generata dalla finestra di progettazione modelli di dati recupera i dati correlati quando è necessaria e il controllo origine dati è associato a tale classe, quindi l'impostazione della Include proprietà non è necessaria. Tuttavia, impostandolo migliora le prestazioni della pagina, perché in caso contrario, Entity Framework effettua chiamate separate al database per recuperare i dati per Course le entità e per le entità correlate Department .
Dopo aver appena creato il controllo, inserire il EntityDataSource markup seguente per creare un QueryExtender controllo associato a tale EntityDataSource controllo.
L'elemento SearchExpression specifica che si desidera selezionare corsi i cui titoli corrispondono al valore immesso nella casella di testo. Verrà confrontato solo il numero di caratteri immessi StartsWithnella casella di testo, perché la SearchType proprietà specifica .
L'elemento OrderByExpression specifica che il set di risultati verrà ordinato in base al titolo del corso all'interno del nome del reparto. Si noti il modo in cui viene specificato il nome del reparto: Department.Name. Poiché l'associazione tra l'entità e l'entità CourseDepartment è uno-a-uno, la Department proprietà di spostamento contiene un'entità Department . Se si tratta di una relazione uno-a-molti, la proprietà conterrà una raccolta. Per ottenere il nome del reparto, è necessario specificare la Name proprietà dell'entità Department .
Infine, aggiungere un GridView controllo per visualizzare l'elenco dei corsi:
La prima colonna è un campo modello che visualizza il nome del reparto. L'espressione databinding specifica Department.Name, esattamente come si è visto nel QueryExtender controllo.
Eseguire la pagina. La visualizzazione iniziale mostra un elenco di tutti i corsi in ordine per reparto e quindi in base al titolo del corso.
Immettere "m" e fare clic su Cerca per visualizzare tutti i corsi i cui titoli iniziano con "m" (la ricerca non è distinzione tra maiuscole e minuscole).
Uso dell'operatore "Like" per filtrare i dati
È possibile ottenere un effetto simile ai QueryExtender tipi di ricerca , Containse EndsWith del StartsWithcontrollo usando un Like operatore nella EntityDataSource proprietà del Where controllo. In questa parte dell'esercitazione si vedrà come usare l'operatore Like per cercare uno studente in base al nome.
Aprire Students.aspx nella visualizzazione Origine . Dopo il controllo, aggiungere il GridView markup seguente:
<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>
Questo markup è simile a quello visualizzato in precedenza, ad eccezione del valore della Where proprietà. La seconda parte dell'espressione Where definisce una ricerca sottostringa (LIKE %FirstMidName% or LIKE %LastName%) che cerca sia i primi che i cognome per qualsiasi elemento immesso nella casella di testo.
Eseguire la pagina. Inizialmente vengono visualizzati tutti gli studenti perché il valore predefinito per il StudentName parametro è "%".
Immettere la lettera "g" nella casella di testo e fare clic su Cerca. Viene visualizzato un elenco di studenti che hanno un "g" nel nome o nel cognome.
Sono stati ora visualizzati, aggiornati, filtrati, ordinati e raggruppati dati da singole tabelle. Nell'esercitazione successiva si inizierà a usare i dati correlati (scenari di dettaglio master).
L'ultimo evento guidato dalla community di Power BI, Infrastruttura, SQL e intelligenza artificiale. 31 marzo - 2 aprile. Usare il codice MSCUST per uno sconto di $ 150. I prezzi sono saliti il 11 febbraio.