Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Autor : Scott Mitchell
W tym samouczku przyjrzymy się dodawaniu metody do naszego DAL i BLL, która akceptuje pojedynczy parametr wejściowy i zwraca dane. W tym przykładzie ten parametr zostanie ustawiony programowo.
Wprowadzenie
Jak pokazano w poprzednim samouczku, dostępnych jest wiele opcji deklaratywnego przekazywania wartości parametrów do metod ObjectDataSource. Jeśli wartość parametru jest zakodowana na twardo, pochodzi z kontrolki sieci Web na stronie lub znajduje się w innym źródle, które można odczytać przez obiekt źródła Parameter danych, na przykład ta wartość może być powiązana z parametrem wejściowym bez konieczności pisania wiersza kodu.
Czasami może się zdarzyć, że wartość parametru pochodzi z jakiegoś źródła, które nie jest jeszcze uwzględnione przez jeden z wbudowanych obiektów źródeł danych Parameter. Jeśli nasza witryna obsługuje konta użytkowników, możemy chcieć ustawić parametr na podstawie aktualnie zalogowanego identyfikatora użytkownika osoby odwiedzającej. Może też być konieczne dostosowanie wartości parametru przed wysłaniem jej do metody obiektu bazowego obiektu ObjectDataSource.
Za każdym razem, gdy wywoływana jest metoda Select obiektu ObjectDataSource, najpierw zgłaszane jest zdarzenie Selecting. Następnie wywoływana jest metoda obiektu bazowego obiektu ObjectDataSource. Po zakończeniu tej operacji wyzwalane jest zdarzenie Selected ObjectDataSource (Rysunek 1 ilustruje tę sekwencję zdarzeń). Wartości parametrów przekazywane do metody obiektu wewnętrznego powiązanego z ObjectDataSource można ustawić lub dostosować w procedurze obsługi zdarzeń dla zdarzenia Selecting.
Rysunek 1: Zdarzenia Selected i Selecting ObjectDataSource są wywoływane przed i po wywołaniu metody obiektu bazowego (Kliknij, aby wyświetlić obraz o pełnym rozmiarze)
W tym samouczku przyjrzymy się temu, jak dodać metodę do naszej warstwy DAL i BLL, która akceptuje pojedynczy parametr Month wejściowy typu Integer i zwraca obiekt EmployeesDataTable wypełniony tymi pracownikami, którzy mają rocznicę zatrudnienia w określonym okresie Month. W naszym przykładzie ten parametr zostanie automatycznie ustawiony na podstawie bieżącego miesiąca, pokazując listę "Rocznice pracowników w tym miesiącu".
Zaczynamy!
Krok 1. Dodawanie metody doEmployeesTableAdapter
W naszym pierwszym przykładzie musimy dodać sposób na pobranie tych pracowników, których zdarzenie HireDate miało miejsce w określonym miesiącu. Aby zapewnić tę funkcjonalność zgodnie z naszą architekturą, należy najpierw utworzyć metodę w EmployeesTableAdapter, która mapuje na właściwą instrukcję SQL. Aby to osiągnąć, zacznij od otworzenia Northwind Typed DataSet. Kliknij prawym przyciskiem myszy etykietę EmployeesTableAdapter i wybierz polecenie Dodaj zapytanie.
Rysunek 2. Dodawanie nowego zapytania do elementu EmployeesTableAdapter (kliknij, aby wyświetlić obraz o pełnym rozmiarze)
Wybierz, aby dodać instrukcję SQL zwracającą wiersze. Po dotarciu do ekranu Określ SELECT instrukcję, zostanie już załadowana domyślna instrukcja SELECT dla EmployeesTableAdapter. Po prostu dodaj klauzulę WHERE : WHERE DATEPART(m, HireDate) = @Month.
DATEPART to funkcja języka T-SQL, która zwraca konkretną część typu datetime; w tym przypadku używamy DATEPART, aby zwrócić miesiąc z kolumny HireDate.
Rysunek 3. Zwracanie tylko tych wierszy, w których kolumna HireDate jest mniejsza niż lub równa parametrowi @HiredBeforeDate (kliknij, aby wyświetlić obraz pełnowymiarowy)
Na koniec zmień nazwy metod FillBy i GetDataBy na FillByHiredDateMonth i GetEmployeesByHiredDateMonth, odpowiednio.
Rysunek 4. Wybieranie bardziej odpowiednich nazw metod niż FillBy i GetDataBy (kliknij, aby wyświetlić obraz pełnowymiarowy)
Kliknij przycisk Zakończ, aby ukończyć pracę kreatora i wrócić do powierzchni projektowej zestawu danych. Element EmployeesTableAdapter powinien teraz zawierać nowy zestaw metod uzyskiwania dostępu do pracowników zatrudnionych w określonym miesiącu.
Rysunek 5. Nowe metody są wyświetlane na powierzchni projektowej zestawu danych (kliknij, aby wyświetlić obraz pełnowymiarowy)
Krok 2. DodawanieGetEmployeesByHiredDateMonth(month)metody do warstwy logiki biznesowej
Ponieważ nasza architektura aplikacji używa oddzielnej warstwy logiki biznesowej i logiki dostępu do danych, musimy dodać metodę do usługi BLL, która wywołuje usługę DAL w celu pobrania pracowników zatrudnionych przed określoną datą.
EmployeesBLL.vb Otwórz plik i dodaj następującą 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
Podobnie jak w przypadku innych metod w tej klasie, GetEmployeesByHiredDateMonth(month) po prostu wywołuje funkcję w DAL i zwraca wyniki.
Krok 3. Wyświetlanie pracowników, których rocznica zatrudniania jest w tym miesiącu
Ostatnim krokiem dla tego przykładu jest wyświetlenie tych pracowników, których rocznica zatrudniania jest w tym miesiącu. Zacznij od dodania kontrolki GridView do ProgrammaticParams.aspx strony w BasicReporting folderze i dodania nowego obiektu ObjectDataSource jako źródła danych. Skonfiguruj ObjectDataSource, aby używać klasy EmployeesBLL z właściwością SelectMethod ustawioną na GetEmployeesByHiredDateMonth(month).
Rysunek 6. Używanie EmployeesBLL klasy (kliknij, aby wyświetlić obraz pełnowymiarowy)
Rysunek 7. Wybieranie z GetEmployeesByHiredDateMonth(month) metody (kliknij, aby wyświetlić obraz pełnowymiarowy)
Na ostatnim ekranie zostanie wyświetlony monit o podanie źródła wartości parametru month . Ponieważ ustawimy tę wartość programowo, pozostaw wartość Źródło parametru ustawioną na domyślną opcję Brak, a następnie kliknij przycisk Zakończ.
Rysunek 8: Pozostaw ustawienie źródła parametru na brak (Kliknij, aby wyświetlić obraz w pełnym rozmiarze)
Spowoduje to utworzenie Parameter obiektu w kolekcji ObjectDataSource SelectParameters , która nie ma określonej wartości.
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetEmployeesByHiredDateMonth" TypeName="EmployeesBLL">
<SelectParameters>
<asp:Parameter Name="month" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Aby ustawić tę wartość programowo, musimy utworzyć program obsługi zdarzeń dla zdarzenia ObjectDataSource Selecting . Aby to zrobić, przejdź do widoku Projekt i kliknij dwukrotnie obiekt ObjectDataSource. Alternatywnie wybierz obiekt ObjectDataSource, przejdź do okna Właściwości i kliknij ikonę pioruna. Następnie kliknij dwukrotnie pole tekstowe obok Selecting zdarzenia lub wpisz nazwę procedury obsługi zdarzeń, której chcesz użyć. Jako trzecia opcja można utworzyć procedurę obsługi zdarzeń, wybierając obiekt ObjectDataSource i jego Selecting zdarzenie z dwóch list rozwijanych w górnej części klasy kodu strony.
Rysunek 9. Kliknij ikonę Lightning Bolt w oknie Właściwości, aby wyświetlić listę zdarzeń kontrolki sieci Web
Wszystkie trzy podejścia dodają nowy obsługiwacz zdarzeń dla zdarzenia ObjectDataSource Selecting do klasy pliku code-behind strony. W tej funkcji obsługi zdarzeń możemy odczytywać i zapisywać wartości parametrów przy użyciu e.InputParameters(parameterName), gdzie parameterName jest wartością atrybutu Name w tagu <asp:Parameter> (kolekcja InputParameters może być również indeksowana ordynalnie, jak w e.InputParameters(index)). Aby ustawić parametr month na bieżący miesiąc, dodaj następujące polecenie do programu obsługi zdarzeń Selecting.
Protected Sub ObjectDataSource1_Selecting _
(sender As Object, e As ObjectDataSourceSelectingEventArgs) _
Handles ObjectDataSource1.Selecting
e.InputParameters("month") = DateTime.Now.Month
End Sub
Podczas odwiedzania tej strony za pośrednictwem przeglądarki widzimy, że tylko jeden pracownik został zatrudniony w tym miesiącu (marzec) Laura Callahan, która jest z firmą od 1994 roku.
Rysunek 10. Ci pracownicy, których rocznice w tym miesiącu są wyświetlane (kliknij, aby wyświetlić obraz pełnowymiarowy)
Podsumowanie
Chociaż wartości parametrów obiektu ObjectDataSource można zwykle ustawiać deklaratywnie, bez konieczności stosowania wiersza kodu, można łatwo ustawić wartości parametrów programowo. Wystarczy utworzyć procedurę obsługi zdarzeń dla zdarzenia ObjectDataSource Selecting , które jest uruchamiane przed wywołaniem metody obiektu bazowego i ręcznie ustawić wartości dla co najmniej jednego parametru InputParameters za pośrednictwem kolekcji.
Ten samouczek kończy sekcję Podstawowe raportowanie. W następnym samouczku rozpoczynamy sekcję Filtrowanie i Scenariusze Master-Details, w której zobaczymy techniki umożliwiające odwiedzającym filtrowanie danych i zagłębianie się w szczegóły raportu z raportu głównego.
Szczęśliwe programowanie!
Informacje o autorze
Scott Mitchell, autor siedmiu książek ASP/ASP.NET i założyciel 4GuysFromRolla.com, współpracuje z technologiami internetowymi firmy Microsoft od 1998 roku. Scott pracuje jako niezależny konsultant, trener i pisarz. Jego najnowsza książka to Sams Teach Yourself ASP.NET 2.0 w ciągu 24 godzin. Można go uzyskać pod adresem mitchell@4GuysFromRolla.com.
Specjalne podziękowania
Ta seria samouczków została omówiona przez wielu przydatnych recenzentów. Główny recenzent tego samouczka to Hilton Giesenow. Chcesz przejrzeć nadchodzące artykuły MSDN? Jeśli tak, napisz do mnie na adres mitchell@4GuysFromRolla.com.