Элемент управления Wizard может сэкономить вам много времени на сантехнику, если вы правильно его используете, однако, если вы научитесь правильно его использовать, это может стоить вам больше, чем время, которое вы сэкономите. Если вы планируете использовать его повторно, то первоначальные инвестиции в изучение его особенностей могут стоить этого.
Я создал мастер, в котором шаги, отображаемые на боковой панели, зависят от того, на каком шаге вы находитесь (и от того, что вы сделали до этого момента). Из этого следует, что шаг, к которому вы переходите, когда нажимаете Next или Previous, также определяется динамически.
Чтобы реализовать это, я прочитал много материала о динамическом отключении шагов, скрытии шагов, а также добавлении и удалении шагов. Последний привел меня в глубокую воду с ViewState. Для чего это стоит, вот мой основной подход:
Вы можете контролировать, какие шаги видны на боковой панели, установив для идентификатора шага (и заголовок, если он установлен) пустую строку, например. У меня есть имена шагов в arrWizardSteps () и мои шаги определены как целочисленные константы, затем используйте
For i = intCREDENTIALS To intADDITIONAL_INFORMATION
Wizard1.WizardSteps(i).ID = IIf(Wizard1.ActiveStepIndex < i, "", arrWizardSteps(i))
Next
Если шаги относительно независимы, вы можете обрабатывать события SideBarButtonClick, PreviousButtonClick и NextButtonClick, вызывая ту же подпрограмму, которую вы создаете для обработки, покидая текущий шаг, и вводя следующий, независимо от того, какую кнопку вы нажали, чтобы сделать переход. Например, подпрограмма может хранить данные, собранные элементами управления текущего шага, и загружать некоторые данные в элементы управления следующего шага.
Если вы обрабатываете эти события, вам, вероятно, нужно самостоятельно изменить ActiveStepIndex. Мастер будет увеличивать / уменьшать ActiveStepIndex (в зависимости от того, какая кнопка была нажата), если вы не измените ее (если вы не установили e.Cancel = true в своем обработчике, где e - аргумент WizardNavigationEventArgs для обработчика).
Если ваш код для скрытия шагов должен знать конечный шаг, вам нужно поместить этот код в PreRender, так как в этот момент мастер перейдет к следующему шагу, и вы узнаете, что это такое.