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 laten we zien hoe u een parameter gebruikt die is ingesteld op een in code vastgelegde waarde om de gegevens te selecteren die moeten worden weergegeven in een DetailView-besturingselement.
Introductie
In de laatste zelfstudie hebben we gekeken naar het weergeven van gegevens met de besturingselementen GridView, DetailsView en FormView die zijn gebonden aan een ObjectDataSource-besturingselement dat de GetProducts() methode uit de ProductsBLL klasse heeft aangeroepen. De GetProducts() methode retourneert een sterk getypte gegevenstabel die is gevuld met alle records uit de tabel van Products de Northwind-database. De ProductsBLL klasse bevat aanvullende methoden voor het retourneren van alleen subsets van de producten - GetProductByProductID(productID), GetProductsByCategoryID(categoryID)en GetProductsBySupplierID(supplierID). Deze drie methoden verwachten een invoerparameter die aangeeft hoe de geretourneerde productgegevens moeten worden gefilterd.
De ObjectDataSource kan worden gebruikt om methoden aan te roepen die invoerparameters verwachten, maar om dit te doen, moeten we opgeven waar de waarden voor deze parameters vandaan komen. De parameterwaarden kunnen in code worden vastgelegd of kunnen afkomstig zijn van verschillende dynamische bronnen, waaronder: queryreekswaarden, sessievariabelen, de eigenschapswaarde van een webbesturingselement op de pagina of andere.
In deze zelfstudie laten we beginnen met het gebruik van een parameter die is ingesteld op een in code vastgelegde waarde. In het bijzonder kijken we naar het toevoegen van een DetailsView aan de pagina met informatie over een specifiek product, namelijk Chef Anton's Gumbo Mix, die een ProductID van 5 heeft. Vervolgens zien we hoe u de parameterwaarde instelt op basis van een webbesturing. In het bijzonder gebruiken we een tekstvak om de gebruiker te laten typen in een land/regio, waarna ze op een knop kunnen klikken om de lijst met leveranciers te zien die zich in dat land/regio bevinden.
Een Hard-Coded parameterwaarde gebruiken
Voor het eerste voorbeeld voegt u eerst een DetailView-besturingselement toe aan de DeclarativeParams.aspx pagina in de BasicReporting map. Selecteer <in de infolabel van DetailsView nieuwe gegevensbron> in de vervolgkeuzelijst en kies ervoor om een ObjectDataSource toe te voegen.
Afbeelding 1: Een ObjectDataSource toevoegen aan de pagina (klik om de afbeelding op volledige grootte weer te geven)
Hiermee wordt de wizard "Gegevensbron kiezen" van het besturingselement ObjectDataSource automatisch gestart. Selecteer de ProductsBLL klasse in het eerste scherm van de wizard.
Afbeelding 2: Selecteer de ProductsBLL klasse (klik om de afbeelding op volledige grootte weer te geven)
Omdat we informatie over een bepaald product willen weergeven, willen we de GetProductByProductID(productID) methode gebruiken.
Afbeelding 3: Kies de GetProductByProductID(productID) methode (klik om de afbeelding op volledige grootte weer te geven)
Omdat de geselecteerde methode een parameter bevat, is er nog een scherm voor de wizard, waarin we worden gevraagd om de waarde te definiëren die moet worden gebruikt voor de parameter. In de lijst aan de linkerkant worden alle parameters voor de geselecteerde methode weergegeven. Voor GetProductByProductID(productID) is er maar één productID. Aan de rechterkant kunnen we de waarde voor de geselecteerde parameter opgeven. In de vervolgkeuzelijst parameterbron worden de verschillende mogelijke bronnen voor de parameterwaarde opgesomd. Omdat we een in code vastgelegde waarde van 5 voor de productID parameter willen opgeven, laat u de parameterbron ongewijzigd en voert u 5 in het tekstvak DefaultValue in.
Afbeelding 4: Een Hard-Coded parameterwaarde van 5 wordt gebruikt voor de productID parameter (klik om de volledige afbeelding weer te geven)
Nadat de wizard Gegevensbron configureren is voltooid, bevat de declaratieve markering van het ObjectDataSource-besturingselement een Parameter object in de SelectParameters collectie voor elk van de invoerparameters die worden verwacht door de methode die in de eigenschap SelectMethod gedefinieerd is. Omdat de methode die we in dit voorbeeld gebruiken, slechts één invoerparameter verwacht, parameterIDis er slechts één vermelding hier. De SelectParameters verzameling kan elke klasse bevatten die is afgeleid van de Parameter klasse in de System.Web.UI.WebControls naamruimte. Voor vastgelegde parameterwaarden wordt de basisklasse Parameter gebruikt, maar voor de andere parameterbronopties wordt een afgeleide Parameter klasse gebruikt. Indien nodig kunt u ook uw eigen aangepaste parametertypen maken.
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="GetProductByProductID" TypeName="ProductsBLL">
<SelectParameters>
<asp:Parameter DefaultValue="5" Name="productID"
Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Opmerking
Als u op uw eigen computer de declaratieve markeringen volgt, kunnen de waarden die u op dit moment ziet, eigenschappen voor de InsertMethod, UpdateMethod, en DeleteMethod bevatten, evenals voor DeleteParameters. De wizard 'Gegevensbron kiezen' van ObjectDataSource specificeert automatisch de methoden van ProductBLL die moeten worden gebruikt voor invoegen, bijwerken en verwijderen. Tenzij u deze expliciet hebt gewist, worden ze opgenomen in de bovengenoemde markup.
Wanneer u deze pagina bezoekt, roept het gegevenswebbesturingselement de methode van ObjectDataSource Select aan, waarmee de methode van ProductsBLL de GetProductByProductID(productID) klasse wordt aangeroepen met behulp van de in code vastgelegde waarde 5 voor de productID invoerparameter. De methode retourneert een sterk getypt ProductDataTable object dat één rij bevat met informatie over Chef Anton's Gumbo Mix (het product met ProductID 5).
Afbeelding 5: Informatie over Chef Anton's Gumbo Mix wordt weergegeven (klik om de afbeelding op volledige grootte weer te geven)
De parameterwaarde instellen op de eigenschapswaarde van een webbesturingselement
De parameterwaarden van ObjectDataSource kunnen ook worden ingesteld op basis van de waarde van een webbesturing op de pagina. Om dit te illustreren, hebben we een GridView met een lijst van alle leveranciers die zich in een land/regio bevinden die door de gebruiker zijn opgegeven. Om dit te bereiken, voegt u eerst een tekstvak toe aan de pagina waarin de gebruiker een land-/landnaam kan invoeren. Stel de eigenschap van ID dit tekstvakbesturingselement in op CountryName. Voeg ook een knopweb besturingselement toe.
Afbeelding 6: Voeg een tekstvak toe aan de pagina met IDCountryName (klik om de afbeelding op volledige grootte weer te geven)
Voeg vervolgens een GridView toe aan de pagina en kies in de infolabel ervoor om een nieuwe ObjectDataSource toe te voegen. Omdat we leveranciersinformatie willen weergeven, selecteert u de SuppliersBLL klasse in het eerste scherm van de wizard. Kies de GetSuppliersByCountry(country) methode in het tweede scherm.
Afbeelding 7: Kies de GetSuppliersByCountry(country) methode (klik om de afbeelding op volledige grootte weer te geven)
Omdat de GetSuppliersByCountry(country) methode een invoerparameter heeft, bevat de wizard opnieuw een eindscherm voor het kiezen van de parameterwaarde. Stel deze keer de parameterbron in op Control. Hiermee wordt de vervolgkeuzelijst ControlID gevuld met de namen van de besturingselementen op de pagina; selecteer het CountryName besturingselement in de lijst. Wanneer de pagina voor het eerst wordt bezocht, is het CountryName tekstvak leeg, dus er worden geen resultaten geretourneerd en er wordt niets weergegeven. Als u standaard bepaalde resultaten wilt weergeven, stelt u het tekstvak DefaultValue dienovereenkomstig in.
Afbeelding 8: Stel de parameterwaarde in op de waarde van het CountryName besturingselement (klik hier om de volledige afbeelding weer te geven)
De declaratieve markeringen van ObjectDataSource verschillen enigszins van ons eerste voorbeeld, met behulp van een ControlParameter in plaats van het standaardobject Parameter . A ControlParameter heeft aanvullende eigenschappen om het ID webbesturingselement en de eigenschapswaarde op te geven die moet worden gebruikt voor de parameter (PropertyName). De wizard Gegevensbron configureren is slim genoeg om te bepalen dat we voor een tekstvak waarschijnlijk de Text eigenschap voor de parameterwaarde willen gebruiken. Als u echter een andere eigenschapswaarde van het webbesturingselement wilt gebruiken, kunt u de PropertyName waarde hier wijzigen of door te klikken op de koppeling Geavanceerde eigenschappen weergeven in de wizard.
<asp:ObjectDataSource ID="ObjectDataSource2" runat="server"
SelectMethod="GetSuppliersByCountry" TypeName="SuppliersBLL">
<SelectParameters>
<asp:ControlParameter ControlID="CountryName"
Name="country" PropertyName="Text"
Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
Wanneer u de pagina voor het eerst bezoekt, is het CountryName tekstvak leeg. De methode van Select ObjectDataSource wordt nog steeds aangeroepen door de GridView, maar er wordt een waarde null doorgegeven aan de GetSuppliersByCountry(country) methode. De TableAdapter converteert de null naar een databasewaarde NULL (DBNull.Value), maar de query die door de GetSuppliersByCountry(country) methode wordt gebruikt, wordt zodanig geschreven dat er geen waarden worden geretourneerd wanneer een NULL waarde voor de @CategoryID parameter wordt opgegeven. Kortom, er worden geen leveranciers geretourneerd.
Zodra de bezoeker echter in een land arriveert en op de knop 'Leveranciers weergeven' klikt om een pagina-ophaalactie te veroorzaken, wordt de methode Select van ObjectDataSource opnieuw opgeroepen, waarbij de waarde van het tekstvak-besturingselement Text wordt doorgegeven als de country-parameter.
Afbeelding 9: Deze leveranciers uit Canada worden weergegeven (klik om de afbeelding op volledige grootte weer te geven)
Standaard alle leveranciers weergeven
In plaats van geen van de leveranciers weer te geven wanneer we de pagina voor het eerst bekijken, willen we mogelijk alle leveranciers eerst weergeven, zodat de gebruiker de lijst kan parseren door een land-/regionaam in het tekstvak in te voeren. Wanneer het tekstvak leeg is, wordt de SuppliersBLL klasse's GetSuppliersByCountry(country) methode doorgegeven in een null waarde voor zijn country invoerparameter. Deze null waarde wordt vervolgens doorgegeven aan de DAL-methode GetSupplierByCountry(country) , waarbij deze wordt vertaald naar een databasewaarde NULL voor de @Country parameter in de volgende query:
SELECT SupplierID, CompanyName, Address, City, Country, Phone
FROM Suppliers
WHERE Country = @Country
De expressie Country = NULL retourneert altijd Onwaar, zelfs voor records waarvan Country de kolom een NULL waarde heeft. Daarom worden er geen records geretourneerd.
Wanneer u alle leveranciers wilt retourneren als het landtekstvak leeg is, kunnen we de GetSuppliersByCountry(country)-methode in de BLL uitbreiden om de GetSuppliers()-methode aan te roepen wanneer de landparameter null is, en anders de DAL-methode GetSuppliersByCountry(country) aan te roepen. Dit heeft het effect van het retourneren van alle leveranciers wanneer er geen land is opgegeven en de juiste subset van leveranciers wanneer de landparameter wordt opgenomen.
Wijzig de GetSuppliersByCountry(country) methode in de SuppliersBLL klasse in het volgende:
public Northwind.SuppliersDataTable GetSuppliersByCountry(string country)
{
if (string.IsNullOrEmpty(country))
return GetSuppliers();
else
return Adapter.GetSuppliersByCountry(country);
}
Met deze wijziging laat de DeclarativeParams.aspx-pagina alle leveranciers zien wanneer deze voor het eerst wordt bezocht (of wanneer het CountryName-tekstvak leeg is).
Afbeelding 10: Alle leveranciers worden nu standaard weergegeven (klik hier om de volledige afbeelding weer te geven)
Samenvatting
Als u methoden wilt gebruiken met invoerparameters, moeten we de waarden opgeven voor de parameters in de verzameling ObjectDataSource SelectParameters . Met verschillende typen parameters kan de parameterwaarde worden verkregen uit verschillende bronnen. Het standaardparametertype maakt gebruik van een in code vastgelegde waarde, maar net zo eenvoudig (en zonder coderegel) kunnen parameterwaarden worden verkregen uit de queryreeks, sessievariabelen, cookies en zelfs door de gebruiker ingevoerde waarden van webbesturingselementen op de pagina.
In de voorbeelden die we in deze zelfstudie hebben bekeken, ziet u hoe u declaratieve parameterwaarden kunt gebruiken. Het kan echter voorkomen dat we een parameterbron moeten gebruiken die niet beschikbaar is, zoals de huidige datum en tijd, of, als onze site lidmaatschap gebruikt, de gebruikers-id van de bezoeker. Voor dergelijke scenario's kunnen we de parameterwaarden programmatisch instellen voordat objectDataSource de methode van het onderliggende object aanroept. In de volgende zelfstudie ziet u hoe u dit kunt doen.
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.