Programowe ustawianie wartości parametrów elementu ObjectDataSource (C#)
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.
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 Month
wejś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.
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.
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
.
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.
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ą SelectMethod
GetEmployeesByHiredDateMonth(month)
.
Rysunek 6. Użyj 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 i kliknij przycisk Zakończ.
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ć.
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.
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.