Wizard Web Server Control [Hasan Mansur]
06.04.2007 15:07:45
Puan:
     


              Bildiğimiz gibi web tarafında ,kullanıcıdan bazen bibiri ile ilşkili veriler toplamak amacıyla bir dizi form tasarlanır.Bu formlar arasında gerekli bilgiler transfer edilerek formlar arasındaki ilişki ve tutarlılık sağlanır.Örneğin kullanıcı kayıt formu , sipariş formu ... gibi. Bu tür seri işlemlerin aynı form üzerinde bu mantıkla çalışması için ASP.NET 2.0 da Wizard denilen bir kontrol ile tanışacağız.Wizard birçok  form aracılığı ile yapılan kullanıcı taraflı bilgileri toplamamızı ve yönetmemizi  kolaylaştırmaktadır.

            Wizard , steplerden oluşmaktadır.Step bir form olarak düşünülebilir.Aslında Wizard daha önceden de yazmış olduğum MultiView kontrolü içermekte olup her bir step MultiView içinde bulunan View ‘ler olarak düşünülmelidir.Stepler arasında dolaşarak işlem yapabilir ve stepler için spesifik kontroller yazabiliriz.Mesela bir diğer stepte , kullanıcı doğrulaması başarılı olursa işlem bitecek  ancak doğrulanamazsa başka bir işlem geçekleştirilecekse bunu yönetmek için kriterler tanımlayabiilrsiniz. 

            Wizard kontrolü Control class’ ından türetilmekte ve BaseWizarrdStep ‘te View’ den türetülmektedirler.Aşağıdaki şekilde Wizard kontrolünün tüm özellikleri,metodları,child kontrolleri liistelenmiştir. Şekilde de gördüğümüz gibi Wizard kontrolü  WizardSteps koleksiyonuna sahiptir.WizardSteps, yazılımcının kullanıcı için geliştirdiği ayrı ayrı arayüzleri  (interface) içeren steplerden oluşmaktadır.
       Wizard kontrolü Header alanına sahiptir ve kullanıcının bulunduğu Step’e özgü bir başlık bilgisi atamak için kullanılabilir.Wizard ayrıca SideBar kontrolüne de sahiptir.Bununla Wizard’ın solunda  Step’lerin Title bilgileri ile bir menü oluşturularak , kullanıcının menüdeki linklere tıklayarak istediği işlemi yağmasını sağlayabiliriz.Wizard kontrolünün Properties ‘ lerine bakıldığında tamamıyla özelleştirilebilir olduğunu göreceksiniz.

            BaseWizardStep, StepType adlı  bir özelliğe (property) sahiptir.Bu özelliğin içerdiklerini şöyle kısaca açıklayalım :

         WizardStepType.Auto : Navigasyon yani ilerleme durumu Wizard’da bulunan “Previous” ve “Next” butonları ile sağlanmaktadır. Stepleri Wizard’a sağ tıklayarak “Add/Remove WizardSteps...” kısmından eklediğimizde stepler birer index numarasına sahip olacaktırlar.Dolayısıyla WizardStepType Auto olarak seçilirse , stepler arasındaki geçiş sırası burada bulunan sıralamayı esas alarak gerçekleşecektir. Bu varsayılan (default) değerdir.

         WizardStepType.Complete : Stepler arasında son adım olarak seçilmek istenenin WizardStepType ‘ı Complete olarak seçilir.Bu durumda navigation butonlar (prev,next,finish) bu stepte yer almayacaktırlar.

            WizardStepType.Finish :  Bu da en son adım olup burada sadece “Previous” ve “Finish” butonları yer alır.

         WizardStepType.Start : Bu ilk adımdır ve sadece “Next” butonu yer alır.

         WizardStepType.Step  : Buda start ile finish stepleri arasında bulunur.”Next” ve “Previous” butonları yer alır.

Şekil 1 : Wizard Kontrol Hiyerarşisi


 

            Bu örneğimde Form üzerine  ToolBox’ tan seçtiğim bir Wizard yerleştiriyorum ve örnek olarak bilgisayar parçalarını seçebileceğimiz ve sonunda bu seçilen parçaları listeleyebileceğimiz bir örnek yapmış olacağız.

            Visual Studio 2005 i açarak FileàNewàWeb Site seçerek  “ WizardDemo” adlı  ASP.NET Web Site  bir proje açalım. ToolBoxtan bir adet Wizard alarak forma bırakalım.Wizard da sağ tıklayarak “Add/Remove WizardSteps..” seçelim ve tek tek Stepleri ekleyelim.Steplerde önemli olan “Title” ve “WizardStepType” özellikleridir.Title , Stepin adı olacaktır ve hem arayüzde hem de kod tarafında (code behind) bu step ile ilgili spesifik işlemler yapmamız için gerekli olacaktır.WizarStepType ise yukarda detaylı olarak açıklandığı üzere hem geçiş sıralaması hem de başlangıç ve sonuç işlemlerini yönetmemiz için gereklidir.Benim uygulama için hazırladıklarım :

Şekil 2 :  Step Ekleme

           

 

 

 

 

 

 

 

Şimdide Sidebarda ki linklere tıklayarak steplerde bulunacak kontrolleri eklemeye başlayabiliriz.

Step1.bmp

Step 1 : iki adet Label.

Step2.bmp

Step 2 : İki adet radiobutton

Step3.bmp

Step 3 : Dört adet radiobutton

 

Step4.bmp

Step 4 :  2 ader radiobutton

Step5.bmp

Step 5 : 4 adet RadioButton

Step6.bmp

Step 6 : 2 adet RadioButton

 

 

LastStep.bmp

Son Step : Listeleme veya mesaj görüntülemek için bir Label

 

Header eklemek için , Wizarda sağ tıklayarak “Edit Templates” à “Header Template” seçelim.

Şekil 3 : Header Template Seçimi

 

Aşağıda da görüldüğü üzere Header Template içerisine bir adet Label koyuyoruz ve istediğinizi “Text” özelliğine yazınız.

Şekil  4 : Header Template Design View

Bunu tamamladıktan sonra sağ tıklayarak “End Edit Template” diyerek işlemlerimize devam ediyoruz.

Wizard için yazdığım kodlar da :

CODE BEHIND :

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

public partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        if (!Page.IsPostBack)

            Wizard1.ActiveStepIndex = 0;

    }

    protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)

    {

        Wizard1.Visible = false;

        if (lblSummary.Text == string.Empty)

        {

            Response.Write("Thank you for visiting our site.<br /> Maybe next time you will get a new one from us");

        }

        else

        {

            Response.Write("<b>Thank you for choosing our products...</b> <br /><br />"

                + "Here is your computer list :  <br />"

                + lblSummary.Text);

        }

    }

    protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e)

    {      

        if (Wizard1.WizardSteps[e.NextStepIndex].Title == "Özet")

        {

            lblSummary.Text = String.Empty;

            foreach (WizardStep ws in Wizard1.WizardSteps)

            {

                foreach (Control ctrl in ws.Controls)

                {

                    if (ctrl is RadioButton)

                    {

                        if (((RadioButton) ctrl).Checked)

                        {

                            lblSummary.Text += ((RadioButton)ctrl).Text + "<br />";

                        }

                    }

                }

            }          

        }

    }

}

 

Proje çalıştırılıp tüm steplerdeki veriler girildiğinde son step şöyle görünecektir.

result1.bmp

Daha sonra Finish butonuna tıklandığında da:

result2.bmp

 

Eğer kullanıcı hiçbir seçim yapmadan, sayfa açıldığında direk “Özet” e tıklarsa :

result3.bmp

Buradan da Finish butonuna tıklanınca :

result4.bmp

 

Sonuç olarak Wizard kontrolü, tek form içerisinde biribiri iile ilişkili verileri aynı ekrandan almamazı sağlamaktadır ve de göründüğü üzere hem yönetimi hem de kullanımı çok kolay.

 
Puan: