Architecture Net


         

Аналогично мы можем заполнить второй


Инициализация гостиниц

Аналогично мы можем заполнить второй раскрывающийся список (DropDownList) названиями гостиниц. Но это немного сложнее, потому что GetHotels возвращает список массивов структур HotelListltem, а не строк. Нам необходимо заполнить раскрывающийся список listHotels названиями гостиниц. Здесь нам поможет метод BindHotels, который просматривает в цикле список гостиниц и создает список массивов с названиями гостиниц. Этот список затем привязывается к раскрывающемуся списку listHotels. Ниже приведен законченный код, содержащий логику инициализации гостиниц для первого города (который имеет индекс 0).

void BindHotels(ArrayList *hotels)
{
ArrayList *hotelNames =
new ArrayList(hotels->Count); // гостиницы
lEnumerator *pEnum = hotels->GetEnumerator(); // гостиницы
while (pEnum->MoveNext())
{
HotelListltem *hotel =
dynaraic_cast<HotelListItem *>
(pEnum->Current) ;
hotelNames->Add(hotel->HotelName->Trim());
// Добавить гостиницу;
}
listHotels->DataSource = hotelNames;
}

Выбор города

И, наконец, мы реализуем следующую особенность: при выборе города отображаются гостиницы в выбранном городе. Мы добавляем обработчик события для выбора города. Ниже приведен код для обработки события SelectedlndexChanged.

void listCities_Selected!ndexChanged(
Object *sender, System::EventArgs *e)
{
String *city = listCities->Selected!tem->Text; // Строка
ArrayList *hotels = hotelBroker->GetHotels(city); // город
BindHotels(hotels); // гостиницы
DataBind();
}

Добавление класса Global (Глобальный)

Добавьте к проекту новый файл Global .азах.h. Как обычно, нет необходимости самостоятельно писать соответствующий код. Его можно скопировать из файла решения, который находится в каталоге CaseStudyXAcmeWeb. Для этого выполните следующие пошаговые инструкции:
1. Скопируйте файл Global.asax.h из каталога CaseStudy\AcmeWeb в каталог Demos\AcmeWeb, где расположен новый проект.
2. В окне Solution Explorer (Поиск решения) щелкните правой кнопкой мыши на узле Header Files (Заголовочные файлы) под проектом AcmeWeb, и выберите Add => Add Existing Item (Добавить => Добавить существующий элемент). Затем дважды щелкните на файле Global.азах.h.
Обратите внимание, что в Global.азах.h метод Application_Start создает экземпляр класса HotelBroker и присваивает его статическому полю hotelBroker. Это поле затем извлекается в исходном файле WebForml.aspx.h методом Page_Load, который был приведен ранее.
//Global.asax.h
#using <.\Hotel.dll>
#using <System.dll>
#using <System.Web.dll>
using namespace System;
// использование пространства имен Система;
using namespace OI::NetCpp::Acme;
namespace AcmeWeb
// пространство имен AcmeWeb
{
public _gc class Global :
// класс сборщика мусора Глобальный:
public System::Web::HttpApplication
{
public:
static HotelBroker *hotelBroker; // статическое поле protected: // защищенный
void Application_Start(
Object *sender, EventArgs *e)
{
hotelBroker = new HotelBroker;
}
}; }


Содержание  Назад  Вперед