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

Autor: Scott Mitchell

Pobierz plik PDF

W tym samouczku przyjrzymy się dodaniu metody do usługi DAL i BLL, która akceptuje pojedynczy parametr wejściowy i zwraca dane. W 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 trwale zakodowana, 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 jednak, gdy wartość parametru pochodzi z niektórych źródeł, które nie zostały jeszcze uwzględnione przez jeden z wbudowanych obiektów źródła Parameter danych. 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 objectDataSource.

Za każdym razem, gdy metoda ObjectDataSource jest wywoływana Select , źródło ObjectDataSource najpierw zgłasza zdarzenie Selecting. Następnie wywoływana jest metoda obiektu bazowego ObjectDataSource. Po zakończeniu wyzwalania wybranego zdarzenia objectDataSource (Rysunek 1 ilustruje tę sekwencję zdarzeń). Wartości parametrów przekazane do metody obiektu bazowego objectDataSource można ustawić lub dostosować w procedurze obsługi zdarzeń Selecting dla zdarzenia.

Wybrane i wybrane zdarzenia obiektu ObjectDataSource są wyzwalane przed i po wywołaniu metody obiektu bazowego

Rysunek 1. Wywołanie metody ObiektuDataSource Selected i Selecting zdarzeń przed i po wywołaniu metody obiektu bazowego (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

W tym samouczku przyjrzymy się dodaniu metody do usługi DAL i BLL, która akceptuje pojedynczy parametr Monthwejściowy , typu int i zwraca EmployeesDataTable obiekt wypełniony tymi pracownikami, którzy mają rocznicę zatrudniania w określonym obiekcie Month. W naszym przykładzie ten parametr zostanie ustawiony programowo na podstawie bieżącego miesiąca z listą "Rocznice pracowników w tym miesiącu".

Zaczynamy!

Krok 1. Dodawanie metody doEmployeesTableAdapter

W naszym pierwszym przykładzie musimy dodać metodę pobierania tych pracowników, których HireDate miało miejsce w określonym miesiącu. Aby zapewnić tę funkcję zgodnie z naszą architekturą, musimy najpierw utworzyć metodę, która EmployeesTableAdapter jest mapowania na właściwą instrukcję SQL. Aby to osiągnąć, zacznij od otwarcia elementu Northwind Typed DataSet. Kliknij prawym przyciskiem myszy etykietę EmployeesTableAdapter i wybierz pozycję Dodaj zapytanie.

Dodawanie nowego zapytania do tabeli EmployeesTableAdapter

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

Wybierz, aby dodać instrukcję SQL zwracającą wiersze. Po osiągnięciu ekranu Określanie SELECT instrukcji zostanie załadowana instrukcja domyślna SELECT dla elementu EmployeesTableAdapter . Po prostu dodaj klauzulę WHERE : WHERE DATEPART(m, HireDate) = @Month. DATEPART to funkcja T-SQL, która zwraca określoną część datetime daty typu. W tym przypadku używamy DATEPART polecenia , aby zwrócić miesiąc HireDate kolumny.

Zwracaj tylko te wiersze, w których kolumna HireDate jest mniejsza lub równa <span class=@HiredBeforeDate Parametr" />

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ń FillBy odpowiednio nazwy metod i GetDataBy na FillByHiredDateMonth i GetEmployeesByHiredDateMonth.

Wybierz bardziej odpowiednie nazwy metod niż FillBy i GetDataBy

Rysunek 4. Wybierz więcej odpowiednich nazw metod niż FillBy i GetDataBy (kliknij, aby wyświetlić obraz pełnowymiarowy)

Kliknij przycisk Zakończ, aby ukończyć pracę kreatora i powró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.

Nowe metody są wyświetlane na powierzchni projektowej zestawu danych

Rysunek 5. Nowe metody pojawiają się 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.cs Otwórz plik i dodaj następującą metodę:

[System.ComponentModel.DataObjectMethodAttribute
    (System.ComponentModel.DataObjectMethodType.Select, false)]
public Northwind.EmployeesDataTable GetEmployeesByHiredDateMonth(int month)
{
    return Adapter.GetEmployeesByHiredDateMonth(month);
}

Podobnie jak w przypadku innych metod w tej klasie, GetEmployeesByHiredDateMonth(month) po prostu wywołuje w dal i zwraca wyniki.

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

Naszym ostatnim krokiem dla tego przykładu jest wyświetlenie tych pracowników, których rocznica zatrudniania jest w tym miesiącu. Zacznij od dodania elementu GridView do ProgrammaticParams.aspx strony w BasicReporting folderze i dodania nowego obiektu ObjectDataSource jako źródła danych. Skonfiguruj obiekt ObjectDataSource, aby używać EmployeesBLL klasy z ustawioną wartością SelectMethodGetEmployeesByHiredDateMonth(month).

Korzystanie z klasy EmployeesBLL

Rysunek 6. Użyj EmployeesBLL klasy (kliknij, aby wyświetlić obraz pełnowymiarowy)

Wybierz metodę GetEmployeesByHiredDateMonth(month)

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 i kliknij przycisk Zakończ.

Pozostaw ustawienie Źródła parametru na Wartość Brak

Rysunek 8. Pozostaw ustawienie Źródło parametru na Brak (kliknij, aby wyświetlić obraz o 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ć procedurę 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 okno Właściwości, a następnie kliknij ikonę błyskawicy. Następnie kliknij dwukrotnie pole tekstowe obok Selecting zdarzenia lub wpisz nazwę procedury obsługi zdarzeń, której chcesz użyć.

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

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

Oba podejścia dodają nową procedurę obsługi zdarzeń dla zdarzenia ObjectDataSource Selecting do klasy za pomocą kodu strony. W tym procedurze obsługi zdarzeń możemy odczytywać i zapisywać wartości parametrów przy użyciu metody e.InputParameters[parameterName], gdzie parameterName jest wartością atrybutu Name w tagu <asp:Parameter> ( InputParameters kolekcja może być również indeksowana w sposób porządkowy, jak w e.InputParameters[index]pliku ). Aby ustawić month parametr na bieżący miesiąc, dodaj następujące polecenie do programu obsługi zdarzeń Selecting :

protected void ObjectDataSource1_Selecting
    (object sender, ObjectDataSourceSelectingEventArgs e)
{
    e.InputParameters["month"] = DateTime.Now.Month;
}

Podczas odwiedzania tej strony za pośrednictwem przeglądarki widać, że tylko jeden pracownik został zatrudniony w tym miesiącu (marzec) Laura Callahan, która jest w firmie od 1994 roku.

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

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 zazwyczaj ustawiać deklaratywne, 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 za pośrednictwem InputParameters kolekcji.

Ten samouczek zawiera sekcję Podstawowa raportowanie. Następny samouczek rozpoczyna sekcję Filtrowanie i Master-Details Scenariusze, w której przyjrzymy się technikom umożliwiającym odwiedzającym filtrowanie danych i przechodzenie do szczegółów 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 do niego dotrzeć pod adresem mitchell@4GuysFromRolla.com. Lub za pośrednictwem swojego bloga, który można znaleźć na stronie http://ScottOnWriting.NET.

Specjalne podziękowania

Ta seria samouczków została sprawdzona przez wielu pomocnych recenzentów. Główny recenzent tego samouczka to Hilton Giesenow. Chcesz przejrzeć nadchodzące artykuły MSDN? Jeśli tak, upuść mi wiersz pod adresem mitchell@4GuysFromRolla.com.