Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här självstudien ska vi titta på hur du lägger till en metod i vår DAL och BLL som accepterar en enda indataparameter och returnerar data. Exemplet anger den här parametern programmatiskt.
Inledning
Som vi såg i den föregående självstudien är ett antal alternativ tillgängliga för deklarativ överföring av parametervärden till ObjectDataSources metoder. Om parametervärdet är hårdkodat, kommer från en webbkontroll på sidan eller finns i någon annan källa som kan läsas av ett datakällobjekt Parameter , kan till exempel det värdet bindas till indataparametern utan att skriva en kodrad.
Det kan dock finnas tillfällen när parametervärdet kommer från en källa som inte redan har redovisats av något av de inbyggda datakällobjekten Parameter . Om vår webbplats stödde användarkonton kanske vi skulle vilja sätta parametern baserat på användar-ID:t av den inloggade besökaren för närvarande. Eller så kan vi behöva anpassa parametervärdet innan vi skickar det till ObjectDataSources underliggande objektmetod.
När metoden ObjectDataSource anropas Select genererar ObjectDataSource först sin Selecting-händelse. ObjectDataSources metod på dess underliggande objekt anropas sedan. När det är klart utlöses ObjectDataSources valda händelse (bild 1 illustrerar den här händelsesekvensen). Parametervärdena som skickas till ObjectDataSources underliggande objektmetod kan anges eller anpassas i en händelsehanterare för Selecting händelsen.
Bild 1: ObjectDataSources Selected och Selecting händelser utlöses före och efter att dess underliggande objekts metod anropas (Klicka om du vill visa en bild i full storlek)
I den här självstudien ska vi titta på hur du lägger till en metod i vår DAL och BLL som accepterar en enda indataparameter Month, av typen Integer och returnerar ett EmployeesDataTable objekt fyllt med de anställda som har sin anställningsdag i angiven Month. Vårt exempel anger den här parametern programmatiskt baserat på den aktuella månaden och visar en lista över "Medarbetares årsdagar den här månaden".
Nu ska vi komma igång!
Steg 1: Lägga till en metod iEmployeesTableAdapter
I vårt första exempel måste vi lägga till ett sätt att hämta de anställda vars HireDate inträffat under en angiven månad. För att tillhandahålla den här funktionen i enlighet med vår arkitektur måste vi först skapa en metod i EmployeesTableAdapter som mappar till rätt SQL-instruktion. För att åstadkomma detta börjar du med att öppna Northwind Typed DataSet. Högerklicka på etiketten EmployeesTableAdapter och välj Lägg till fråga.
Bild 2: Lägg till en ny fråga i EmployeesTableAdapter (Klicka om du vill visa en bild i full storlek)
Välj att lägga till en SQL-instruktion som returnerar rader. När du kommer till skärmen Specificera ett SELECT uttalande, är standarduttalandet för SELECT redan inläst. Lägg bara till i WHERE -satsen: WHERE DATEPART(m, HireDate) = @Month.
DATEPART är en T-SQL-funktion som returnerar en viss datumdel av en datetime typ. I det här fallet använder DATEPART vi för att returnera kolumnens HireDate månad.
@HiredBeforeDate-parameter" />
Bild 3: Returnera endast de rader där HireDate kolumnen är mindre än eller lika med parametern @HiredBeforeDate (Klicka om du vill visa en bild i full storlek)
Slutligen ändrar du metodnamnen FillBy och GetDataBy till FillByHiredDateMonth respektive GetEmployeesByHiredDateMonth.
Bild 4: Välj lämpligare metodnamn än FillBy och GetDataBy (Klicka om du vill visa en bild i full storlek)
Klicka på Slutför för att slutföra guiden och återgå till datamängdens designvy.
EmployeesTableAdapter Bör nu innehålla en ny uppsättning metoder för att få åtkomst till anställda som anställts under en angiven månad.
Bild 5: De nya metoderna visas i datauppsättningens designyta (klicka om du vill visa en bild i full storlek)
Steg 2: Lägga tillGetEmployeesByHiredDateMonth(month)metoden i affärslogiklagret
Eftersom vår programarkitektur använder ett separat lager för affärslogik och dataåtkomstlogik måste vi lägga till en metod i vår BLL som anropar ner till DAL för att hämta anställda som anställts före ett angivet datum.
EmployeesBLL.vb Öppna filen och lägg till följande metod:
<System.ComponentModel.DataObjectMethodAttribute _
(System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetEmployeesByHiredDateMonth(ByVal month As Integer) _
As Northwind.EmployeesDataTable
Return Adapter.GetEmployeesByHiredDateMonth(month)
End Function
Precis som med våra andra metoder i den här klassen anropar GetEmployeesByHiredDateMonth(month) helt enkelt DAL och returnerar resultaten.
Steg 3: Visa anställda vars anställningsdag är den här månaden
Vårt sista steg för det här exemplet är att visa de anställda vars anställningsdag är den här månaden. Börja med att lägga till en GridView på ProgrammaticParams.aspx sidan i BasicReporting mappen och lägg till en ny ObjectDataSource som datakälla. Konfigurera ObjectDataSource för att använda klassen EmployeesBLL med SelectMethod inställd på GetEmployeesByHiredDateMonth(month).
Bild 6: Använd EmployeesBLL klassen (Klicka om du vill visa en bild i full storlek)
Bild 7: Välj Från GetEmployeesByHiredDateMonth(month) metoden (Klicka om du vill visa en bild i full storlek)
Den sista skärmen ber oss att ange month parametervärdets källa. Eftersom vi anger det här värdet programmatiskt låter du parameterkällan vara inställd på alternativet Ingen som standard och klickar på Slutför.
Bild 8: Låt parameterkällan vara inställd på Ingen (klicka om du vill visa en bild i full storlek)
Då skapas ett Parameter objekt i ObjectDataSources SelectParameters samling som inte har något angivet värde.
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetEmployeesByHiredDateMonth" TypeName="EmployeesBLL">
<SelectParameters>
<asp:Parameter Name="month" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
För att kunna ange det här värdet programmatiskt måste vi skapa en händelsehanterare för ObjectDataSource-händelsen Selecting . Det gör du genom att gå till designvyn och dubbelklicka på ObjectDataSource. Du kan också välja ObjectDataSource, gå till fönstret Egenskaper och klicka på blixtikonen. Dubbelklicka sedan i textrutan bredvid Selecting händelsen eller skriv namnet på den händelsehanterare som du vill använda. Som ett tredje alternativ kan du skapa händelsehanteraren genom att välja ObjectDataSource och dess Selecting händelse från de två listrutorna längst upp i sidans kod-bakom-klassen.
Bild 9: Klicka på blixtikonen i egenskapsfönstret för att visa en webbkontrolls händelser
Alla tre metoderna lägger till en ny händelsehanterare för ObjectDataSource-händelsen Selecting i sidans kod bakom-klass. I den här händelsehanteraren kan vi läsa och skriva till parametervärdena med hjälp av e.InputParameters(parameterName), där parameterName är värdet för Name-attributet i <asp:Parameter>-taggen (InputParameters-samlingen kan också indexeras ordningstal, som i e.InputParameters(index)). Om du vill ange parametern month till den aktuella månaden lägger du till följande i Selecting händelsehanteraren:
Protected Sub ObjectDataSource1_Selecting _
(sender As Object, e As ObjectDataSourceSelectingEventArgs) _
Handles ObjectDataSource1.Selecting
e.InputParameters("month") = DateTime.Now.Month
End Sub
När vi besöker den här sidan via en webbläsare kan vi se att endast en anställd anställdes den här månaden (mars) Laura Callahan, som har varit hos företaget sedan 1994.
Bild 10: De anställda vars årsdagar den här månaden visas (klicka om du vill visa en bild i full storlek)
Sammanfattning
Även om ObjectDataSources parametrars värden vanligtvis kan anges deklarativt, utan att kräva en kodrad, är det enkelt att ange parametervärdena programmatiskt. Allt vi behöver göra är att skapa en händelsehanterare för ObjectDataSource-händelsen Selecting , som utlöses innan det underliggande objektets metod anropas och manuellt ange värdena för en eller flera parametrar via InputParameters samlingen.
Denna handledning avslutar avsnittet Grundläggande rapportering. Nästa självstudie inleder avsnittet Filtrering och Master-Details-scenarier, där vi tittar på tekniker för att tillåta besökaren att filtrera data och djupdyka från en övergripande rapport till en detaljrapport.
Lycka till med programmerandet!
Om författaren
Scott Mitchell, författare till sju ASP/ASP.NET-böcker och grundare av 4GuysFromRolla.com, har arbetat med Microsofts webbtekniker sedan 1998. Scott arbetar som oberoende konsult, tränare och författare. Hans senaste bok är Sams Teach Yourself ASP.NET 2.0 på 24 timmar. Han kan nås på mitchell@4GuysFromRolla.com.
Särskilt tack till
Den här självstudieserien granskades av många användbara granskare. Ansvarig granskare för den här handledningen var Hilton Giesenow. Vill du granska mina kommande MSDN-artiklar? Om så är fallet, hör av dig på mitchell@4GuysFromRolla.com.