Programowe ustawianie wartości parametrów elementu ObjectDataSource (VB)

przez Scott Mitchell

Pobierz przykładową aplikację lub Pobierz plik PDF

W tym samouczku dowiesz się, jak dodać metodę do naszych DAL i LOGIKI biznesowej, która akceptuje pojedynczy parametr wejściowy i zwraca dane. Przykład ustawia ten parametr programowo.

Wprowadzenie

Jak zostało to opisane w poprzednim samouczku, dostępne są różne opcje umożliwiające deklaratywne przekazywanie wartości parametrów do metod elementu ObjectDataSource. Jeśli wartość parametru jest zakodowana na stałe, pochodzi z kontrolki sieci Web na stronie lub znajduje się w innym źródle, które jest odczytywane przez źródło danych Parameter obiektu, na przykład ta wartość może być powiązana z parametrem wejściowym bez pisania wiersza kodu.

Mogą jednak wystąpić sytuacje, gdy wartość parametru pochodzi z niektórych źródeł, które nie są jeszcze uwzględniane przez jedno z wbudowanych źródeł danych Parameter obiektów. Jeśli nasza witryna obsługuje konta użytkowników, warto ustawić parametr na podstawie identyfikatora użytkownika zalogowanego obecnie. Może być również konieczne dostosowanie wartości parametru przed wysłaniem go do metody obiektu bazowego elementu ObjectDataSource.

Za każdym razem, gdy metoda Select elementu ObjectDataSource jest wywoływana, element ObjectDataSource najpierw wywołuje jego zdarzenie select. Metoda obiektu bazowego elementu ObjectDataSource jest następnie wywoływana. Po zakończeniu tego procesu zostanie wyzwolone wybrane zdarzenie elementu ObjectDataSource (rysunek 1 ilustruje tę sekwencję zdarzeń). Wartości parametrów przesłane do metody obiektu bazowego elementu ObjectDataSource można ustawić lub dostosować w programie obsługi zdarzeń dla zdarzenia Selecting.

zaznaczonego elementu ObjectDataSource i wybierz zdarzenia wyzwalane przed i po wywołaniu metody obiektu źródłowego

Rysunek 1: Selected i zdarzenia Selecting elementu ObjectDataSource przed wywołaniem i po wywołaniu metody obiektu źródłowego (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

W tym samouczku dowiesz się, jak dodać metodę do naszych DAL i LOGIKI biznesowej, która akceptuje pojedynczy parametr wejściowy Monthtypu Integer i zwraca obiekt EmployeesDataTable wypełniony tym pracownikom, którzy mają rocznicę zatrudniania w określonym Month. Nasz przykład skonfiguruje ten parametr programowo na podstawie bieżącego miesiąca, pokazując listę "rocznice pracowników w tym miesiącu".

Zacznijmy!

Krok 1. Dodawanie metody doEmployeesTableAdapter

Aby skorzystać z pierwszego przykładu, należy dodać metodę w celu pobrania tych pracowników, których HireDate wystąpiły w określonym miesiącu. Aby zapewnić tę funkcjonalność zgodnie z naszą architekturą, musimy najpierw utworzyć metodę w EmployeesTableAdapter, która mapuje do właściwej instrukcji SQL. Aby to osiągnąć, Zacznij od otworzenia zestawu danych Northwind. Kliknij prawym przyciskiem myszy etykietę EmployeesTableAdapter i wybierz polecenie Dodaj zapytanie.

dodać nowego zapytania do EmployeesTableAdapter

Rysunek 2. Dodawanie nowego zapytania do EmployeesTableAdapter (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

Wybierz, aby dodać instrukcję SQL zwracającą wiersze. Gdy zostanie osiągnięty ekran "Określanie SELECT instrukcji", domyślna instrukcja SELECT dla EmployeesTableAdapter zostanie już załadowana. Po prostu Dodaj w klauzuli WHERE: WHERE DATEPART(m, HireDate) = @Month. DatePart jest funkcją T-SQL, która zwraca określoną część daty typu datetime; w tym przypadku używamy DATEPART, aby zwrócić miesiąc HireDatej kolumny.

zwracać tylko wiersze, w których kolumna HireDate jest mniejsza lub równa parametrowi @HiredBeforeDate

Rysunek 3. Zwracanie tylko tych wierszy, w których kolumna HireDate jest mniejsza lub równa parametrowi @HiredBeforeDate (kliknij, aby wyświetlić obraz w pełnym rozmiarze)

Na koniec Zmień nazwy metod FillBy i GetDataBy na odpowiednio FillByHiredDateMonth i GetEmployeesByHiredDateMonth.

wybrać bardziej odpowiednie nazwy metod niż FillBy i GetDataBy

Ilustracja 4. Wybieranie bardziej odpowiednich nazw metod niż FillBy i GetDataBy (kliknij, aby wyświetlić obraz w pełnym rozmiarze)

Kliknij przycisk Zakończ, aby zakończyć pracę kreatora i powrócić do powierzchni projektowej zestawu danych. EmployeesTableAdapter powinien teraz zawierać nowy zestaw metod do uzyskiwania dostępu do pracowników zatrudnionych w określonym miesiącu.

nowe metody są wyświetlane w Powierzchnia projektowa zestawu danych

Rysunek 5. nowe metody są wyświetlane w powierzchnia projektowa zestawu danych (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

Krok 2. Dodawanie metodyGetEmployeesByHiredDateMonth(month)do warstwy logiki biznesowej

Ponieważ nasza architektura aplikacji korzysta z oddzielnej warstwy dla logiki biznesowej i logiki dostępu do danych, musimy dodać metodę do LOGIKI biznesowej, która wywołuje DAL, aby pobrać pracowników zatrudnionych przed określoną datą. Otwórz plik EmployeesBLL.vb 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 do DAL i zwraca wyniki.

Krok 3. Wyświetlanie pracowników, których rocznica zatrudnienia jest w tym miesiącu

Ostatnim krokiem tego przykładu jest wyświetlenie pracowników, których rocznica zatrudnienia jest w tym miesiącu. Zacznij od dodania widoku GridView do strony ProgrammaticParams.aspx w folderze BasicReporting i dodania nowego elementu ObjectDataSource jako źródła danych. Skonfiguruj element ObjectDataSource, aby używał klasy EmployeesBLL z SelectMethod ustawionym na GetEmployeesByHiredDateMonth(month).

użyć klasy EmployeesBLL

Ilustracja 6. użyj klasy EmployeesBLL (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

wybierać z metody GetEmployeesByHiredDateMonth (miesiąc)

Rysunek 7: wybór z metody GetEmployeesByHiredDateMonth(month) (kliknij, aby wyświetlić obraz w pełnym rozmiarze)

Na ostatnim ekranie poprosimy nas o podanie wartości parametru month. Ponieważ ustawimy tę wartość programowo, pozostaw opcję Źródło parametru ustawioną Domyślnie none i kliknij przycisk Zakończ.

pozostawić Źródło parametru jako None

Ilustracja 8. Pozostaw Źródło parametru ustawione na None (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

Spowoduje to utworzenie obiektu Parameter w kolekcji SelectParameters elementu ObjectDataSource, 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 programowo ustawić tę wartość, musimy utworzyć procedurę obsługi zdarzeń dla zdarzenia Selecting elementu ObjectDataSource. Aby to osiągnąć, przejdź do widok Projekt i kliknij dwukrotnie element ObjectDataSource. Alternatywnie wybierz element ObjectDataSource, przejdź do okno Właściwości, a następnie kliknij ikonę błyskawicy. Następnie kliknij dwukrotnie pole tekstowe obok zdarzenia Selecting lub wpisz nazwę programu obsługi zdarzeń, którego chcesz użyć. Jako trzecią opcję można utworzyć procedurę obsługi zdarzeń, wybierając element ObjectDataSource i jego zdarzenie Selecting z dwóch list rozwijanych w górnej części klasy z kodem związanym ze stroną.

Kliknij ikonę pioruna w oknie właściwości, aby wyświetlić listę zdarzeń kontrolki sieci Web

Ilustracja 9. Kliknij ikonę pioruna w oknie właściwości, aby wyświetlić listę zdarzeń kontrolki sieci Web

Wszystkie trzy podejścia dodają nowy program obsługi zdarzeń dla zdarzenia Selecting elementu ObjectDataSource do klasy powiązanej z kodem strony. W tym obsłudze 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 w e.InputParameters(index)). Aby ustawić parametr month na bieżący miesiąc, Dodaj następujący kod 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 można zobaczyć, że tylko jeden pracownik został zatrudniony w tym miesiącu (marzec) Laura Callahan, który jest członkiem firmy od 1994.

tym pracownikom, których rocznice w tym miesiącu są wyświetlane

Rysunek 10. pracownicy, których rocznice w tym miesiącu są pokazywane (kliknij, aby wyświetlić obraz w pełnym rozmiarze)

Podsumowanie

Chociaż wartości parametrów elementu ObjectDataSource mogą być zazwyczaj ustawiane w sposób deklaratywny, bez konieczności korzystania z wiersza kodu, można łatwo ustawiać wartości parametrów programowo. Wystarczy utworzyć procedurę obsługi zdarzeń dla zdarzenia Selecting elementu ObjectDataSource, które zostanie wyzwolone przed wywołaniem metody obiektu źródłowego, i ręcznie ustawić wartości dla jednego lub kilku parametrów za pośrednictwem InputParameters kolekcji.

Ten samouczek zawiera podstawową sekcję raportowania. W następnym samouczku znajdują się sekcje filtrowanie i szczegółowe informacje o scenariuszach, w których zawarto informacje o metodach umożliwiających odwiedzającemu odfiltrowanie danych i przechodzenie do szczegółów raportu głównego.

Szczęśliwe programowanie!

Informacje o autorze

Scott Mitchell, autor siedmiu grup ASP/ASP. NET Books i założyciel of 4GuysFromRolla.com, pracował z technologiami sieci Web firmy Microsoft od czasu 1998. Scott działa jako niezależny konsultant, trainer i składnik zapisywania. Jego Najnowsza książka to Sams ASP.NET 2,0 w ciągu 24 godzin. Można go osiągnąć w mitchell@4GuysFromRolla.com. lub za pośrednictwem swojego blogu, który można znaleźć w http://ScottOnWriting.NET.

Specjalne podziękowania

Ta seria samouczków została sprawdzona przez wielu przydatnych recenzentów. Recenzent potencjalnych klientów dla tego samouczka został Hilton Giesenow. Chcesz przeglądać moje nadchodzące artykuły MSDN? Jeśli tak, upuść mi linię w mitchell@4GuysFromRolla.com.