Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
door Scott Mitchell
In deze zelfstudie kijken we naar het toevoegen van een methode aan onze DAL en BLL die één invoerparameter accepteert en gegevens retourneert. In het voorbeeld wordt deze parameter programmatisch ingesteld.
Introductie
Zoals we in de vorige zelfstudie hebben gezien, zijn er een aantal opties beschikbaar voor het declaratief doorgeven van parameterwaarden aan de methoden van ObjectDataSource. Als de parameterwaarde in code is vastgelegd, afkomstig is van een webbesturingselement op de pagina of zich in een andere bron bevindt die kan worden gelezen door een gegevensbronobject Parameter , kan die waarde bijvoorbeeld worden gebonden aan de invoerparameter zonder een coderegel te schrijven.
Het kan echter voorkomen dat de parameterwaarde afkomstig is van een bron die nog niet wordt verwerkt door een van de ingebouwde gegevensbronobjecten Parameter. Als onze site gebruikersaccounts ondersteunt, kunnen we de parameter instellen op basis van de gebruikers-id van de bezoeker die momenteel is aangemeld. Of mogelijk moeten we de parameterwaarde aanpassen voordat deze wordt verzonden naar de methode van het onderliggende object van ObjectDataSource.
Telkens wanneer de methode van Select ObjectDataSource wordt aangeroepen, roept de ObjectDataSource eerst zijn Selecting-gebeurtenis op. De methode van het onderliggende object van ObjectDataSource wordt vervolgens aangeroepen. Zodra dit is voltooid, wordt de geselecteerde gebeurtenis van ObjectDataSource geactiveerd (afbeelding 1 illustreert deze reeks gebeurtenissen). De parameterwaarden die worden doorgegeven aan de methode van het onderliggende object van ObjectDataSource, kunnen worden ingesteld of aangepast in een gebeurtenis-handler voor de Selecting gebeurtenis.
Afbeelding 1: De ObjectDataSource's Selected en Selecting gebeurtenissen worden getriggerd vóór en nadat de methode van het onderliggende object is aangeroepen (klik om de volledige afbeelding te bekijken)
In deze zelfstudie bekijken we hoe we een methode kunnen toevoegen aan onze DAL en BLL die een enkele invoerparameter Month accepteert van het type Integer, en een EmployeesDataTable object retourneert dat gevuld is met werknemers die hun jubileumdatum van indiensttreding hebben in de opgegeven Month. In ons voorbeeld wordt deze parameter programmatisch ingesteld op basis van de huidige maand, met een lijst met 'Verjaardagen van werknemers deze maand'.
Laten we aan de slag gaan.
Stap 1: Een methode toevoegen aanEmployeesTableAdapter
Voor ons eerste voorbeeld moeten we een methode toevoegen om die werknemers op te halen waarvan HireDate de gebeurtenis zich in een opgegeven maand heeft voorgedaan. Om deze functionaliteit te bieden in overeenstemming met onze architectuur, moeten we eerst een methode maken in EmployeesTableAdapter die overeenkomt met de juiste SQL-instructie. Om dit te bereiken, opent u eerst de Gegevensset met het type Northwind. Klik met de rechtermuisknop op het EmployeesTableAdapter label en kies Query toevoegen.
Afbeelding 2: Voeg een nieuwe query toe aan de EmployeesTableAdapter afbeelding (klik om de volledige afbeelding weer te geven)
Kies ervoor om een SQL-instructie toe te voegen waarmee rijen worden geretourneerd. Wanneer u het scherm "Een SELECT -instructie opgeven" bereikt, is de standaard SELECT -instructie voor de EmployeesTableAdapter al geladen. Voeg gewoon de WHERE component toe: WHERE DATEPART(m, HireDate) = @Month.
DATEPART is een T-SQL-functie die een bepaald datumgedeelte van een datetime type retourneert. In dit geval wordt DATEPART de maand van de HireDate kolom geretourneerd.
Afbeelding 3: Alleen rijen retourneren waarbij de HireDate kolom kleiner is dan of gelijk is aan de @HiredBeforeDate parameter (klik om de volledige afbeelding weer te geven)
Wijzig ten slotte de FillBy en GetDataBy methodenamen naar respectievelijk FillByHiredDateMonth en GetEmployeesByHiredDateMonth.
Afbeelding 4: Kies Meer geschikte methodenamen dan FillBy en GetDataBy (klik om de afbeelding op volledige grootte weer te geven)
Klik op Voltooien om de wizard te voltooien en terug te keren naar het ontwerpoppervlak van de DataSet. Het EmployeesTableAdapter moet nu een nieuwe set methoden bevatten voor toegang tot werknemers die in een opgegeven maand zijn ingehuurd.
Afbeelding 5: De nieuwe methoden worden weergegeven in het ontwerpoppervlak van de DataSet (klik om de afbeelding op volledige grootte weer te geven)
Stap 2: deGetEmployeesByHiredDateMonth(month)methode toevoegen aan de bedrijfslogicalaag
Omdat onze toepassingsarchitectuur gebruikmaakt van een afzonderlijke laag voor de bedrijfslogica en gegevenstoegangslogica, moeten we een methode toevoegen aan onze BLL die de DAL aanroept om werknemers op te halen die vóór een opgegeven datum zijn ingehuurd. Open het EmployeesBLL.vb bestand en voeg de volgende methode toe:
<System.ComponentModel.DataObjectMethodAttribute _
(System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetEmployeesByHiredDateMonth(ByVal month As Integer) _
As Northwind.EmployeesDataTable
Return Adapter.GetEmployeesByHiredDateMonth(month)
End Function
Net als bij onze andere methoden in deze klasse, roept GetEmployeesByHiredDateMonth(month) simpelweg de DAL aan en retourneert de resultaten.
Stap 3: werknemers weergeven waarvan de wervingsdag deze maand is
Onze laatste stap voor dit voorbeeld is om die werknemers weer te geven waarvan de wervingsdag deze maand is. Voeg eerst een GridView toe aan de ProgrammaticParams.aspx pagina in de BasicReporting map en voeg een nieuwe ObjectDataSource toe als gegevensbron. Configureer de ObjectDataSource om de EmployeesBLL-klasse te gebruiken met SelectMethod ingesteld op GetEmployeesByHiredDateMonth(month).
Afbeelding 6: De EmployeesBLL klasse gebruiken (klik om de afbeelding op volledige grootte weer te geven)
Afbeelding 7: Selecteren uit de GetEmployeesByHiredDateMonth(month) methode (Klik om de afbeelding op volledige grootte weer te geven)
In het laatste scherm wordt ons gevraagd om de bron van de month parameterwaarde op te geven. Omdat we deze waarde programmatisch instellen, laat u de parameterbron ingesteld op de standaardoptie Geen en klikt u op Voltooien.
Afbeelding 8: Laat de parameterbron ingesteld op Geen (klik om de volledige afbeelding weer te geven)
Hiermee maakt u een Parameter object in de verzameling van ObjectDataSource SelectParameters waarvoor geen waarde is opgegeven.
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetEmployeesByHiredDateMonth" TypeName="EmployeesBLL">
<SelectParameters>
<asp:Parameter Name="month" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Als u deze waarde programmatisch wilt instellen, moet u een gebeurtenis-handler maken voor de gebeurtenis van Selecting ObjectDataSource. Hiervoor gaat u naar de ontwerpweergave en dubbelklikt u op ObjectDataSource. U kunt ook de ObjectDataSource selecteren, naar het venster Eigenschappen gaan en op het bliksemschichtpictogram klikken. Dubbelklik vervolgens in het tekstvak naast de Selecting gebeurtenis of typ de naam van de gebeurtenis-handler die u wilt gebruiken. Als derde optie kunt u de gebeurtenis-handler maken door de ObjectDataSource en Selecting de bijbehorende gebeurtenis te selecteren in de twee vervolgkeuzelijsten boven aan de code-behind-klasse van de pagina.
Afbeelding 9: Klik op het bliksemschichtpictogram in het venster Eigenschappen om de gebeurtenissen van een webbesturing weer te geven
Alle drie de benaderingen voegen een nieuwe event handler toe voor het Selecting-evenement van de ObjectDataSource aan de code-behind-klasse van de pagina. In deze gebeurtenis-handler kunnen we de parameterwaarden lezen en schrijven met behulp van e.InputParameters(parameterName), waar parameterName is de waarde van het Name kenmerk in de <asp:Parameter> tag (de InputParameters verzameling kan ook ordinaal worden geïndexeerd, zoals in e.InputParameters(index)). Als u de month parameter wilt instellen op de huidige maand, voegt u het volgende toe aan de Selecting gebeurtenis-handler:
Protected Sub ObjectDataSource1_Selecting _
(sender As Object, e As ObjectDataSourceSelectingEventArgs) _
Handles ObjectDataSource1.Selecting
e.InputParameters("month") = DateTime.Now.Month
End Sub
Bij het bezoeken van deze pagina via een browser zien we dat er deze maand (maart) slechts één werknemer is aangenomen Laura Callahan, die sinds 1994 bij het bedrijf is geweest.
Afbeelding 10: Werknemers waarvan de verjaardagen deze maand worden weergegeven (klik om een afbeelding van volledige grootte weer te geven)
Samenvatting
Hoewel de waarden van de parameters van ObjectDataSource doorgaans declaratief kunnen worden ingesteld, zonder dat hiervoor een coderegel is vereist, is het eenvoudig om de parameterwaarden programmatisch in te stellen. U hoeft alleen maar een gebeurtenis-handler te maken voor de gebeurtenis van ObjectDataSource Selecting , die wordt geactiveerd voordat de methode van het onderliggende object wordt aangeroepen, en de waarden voor een of meer parameters handmatig instellen via de InputParameters verzameling.
Deze zelfstudie sluit de sectie Basisrapportage af. In de volgende zelfstudie wordt de sectie Filteren en Master-Details Scenario's gestart, waarin we kijken naar technieken waarmee de bezoeker gegevens kan filteren en inzoomt op een hoofdrapport in een detailrapport.
Veel plezier met programmeren!
Over de auteur
Scott Mitchell, auteur van zeven ASP/ASP.NET-boeken en oprichter van 4GuysFromRolla.com, werkt sinds 1998 met Microsoft-webtechnologieën. Scott werkt als onafhankelijk consultant, trainer en schrijver. Zijn laatste boek is Sams Teach Yourself ASP.NET 2.0 in 24 uur. Hij kan worden bereikt op mitchell@4GuysFromRolla.com.
Speciale dank aan
Deze tutorialreeks is beoordeeld door veel behulpzame beoordelers. Hoofdrecensent voor deze zelfstudie was Hilton Giesenow. Bent u geïnteresseerd in het bekijken van mijn aanstaande MSDN-artikelen? Zo ja, laat iets van je horen via mitchell@4GuysFromRolla.com.
@HiredBeforeDate" />