Makale Özeti

Çoğu webpart, tek başına bilgi sunmaktan fazlasını yapar.. Webpart’lar oluşturulacak bağlantılar ile birbirleri ile iletişim kurabilirler. Bu özellik, bir webparttan diğer bir webpart’a bilgi aktarılacağı durumlarda oldukça faydalı olmaktadır. Örneğin bir webpart’ta adres bilgisi edinmek için posta kodu bilgisini girebilirsiniz. Aynı posta kodu bilgisi hava durumu bilgisini edinmek için bir başka webpart’a aktarılabilir.

Makale

.NET 2.0 ile birlikte uygulama geliştiricilerin kullanımına sunulan Web part Framework’u yakından incelemeye devam ediyoruz.

WebPart’ların Birbirleri İle İletişim Kurmasını Sağlamak

Çoğu webpart, tek başına bilgi sunmaktan fazlasını yapar.. Webpart’lar oluşturulacak bağlantılar ile birbirleri ile iletişim kurabilirler. Bu özellik, bir webparttan diğer bir webpart’a bilgi aktarılacağı durumlarda oldukça faydalı olmaktadır. Örneğin bir webpart’ta adres bilgisi edinmek için posta kodu bilgisini girebilirsiniz. Aynı posta kodu bilgisi hava durumu bilgisini edinmek için bir başka webpart’a aktarılabilir.

İki webpart’ın birbirine nasıl bağlandığını göstermek için bir adet calendar kontrolü içeren yeni bir web user control oluşturuyoruz. Kullanıcı calendar kontrolünü tıkladığında seçilen tarih, önceki bölümlerde oluşturduğumuz google web user controlüne gönderilerek görüntülenecektir.

  1. Önceki bölümlerde üzerinde çalıştığımız projeye yeni bir class ekliyoruz ve eklediğimiz class’ı ISelectedDate şeklinde adlandırıyoruz.
  2. ISelectedDate.vb dosyasındaki kod aşağıdaki gibi olacaktır. ISelectedDate arayüzü hem bağlantıyı sunan (CalendarUC.ascx) hem de bağlantıyı kullanan (Google.ascx) webpartlar tarafından implement edilmelidir.

Imports Microsoft.VisualBasic

Public Interface ISelectedDate

    ReadOnly Property SelectedDate() As Date

End Interface

  1. Projeye yeni bir Web User Control ekleyerek CalendarUC.ascx şeklinde isimlendiriyoruz.
  2. CalendarUC kullanıcı kontrolüne bir adet Calendar kontrolü ekleyerek auto format özlelliğini kullanarak istediğimiz biçimlendirmeyi uyguluyoruz.
  3. CalendarUC.ascx dosyasının kodları aşağıdaki gibi olacaktır.

Partial Class CalendarUC

    Inherits System.Web.UI.UserControl

    Implements ISelectedDate

 

    Public ReadOnly Property SelectedDate() As Date Implements ISelectedDate.SelectedDate

        Get

            Return Calendar1.SelectedDate.Date

        End Get

    End Property

 

    <ConnectionProvider("SelectedDate", "SelectedDate")> _

    Public Function GetSelectedDate() As ISelectedDate

        Return Me

    End Function

End Class

  1. ConnectionProvider özniteliğinin ilk parametresi provider bağlantı noktası için bir isimdir. İkinci parametre ise bağlantı noktası için bir unique isim verir.
  2. ISelectedDate arayüzünü implement ederek bir provider bağlantı noktası oluşturmaya ek olarak SelectedDate özelliğini implement ederek Calendar kontrolünde yapılan seçimi gönderebiliriz.
  3. Google.ascx kullanıcı kontrolüne aşağıdaki kodları ekliyoruz.

    Private _selectedDate As ISelectedDate
    <ConnectionConsumer("SelectedDate", "SelectedDate")> _
    Sub setSearchText(ByVal SearchText As ISelectedDate)
        Me._selectedDate = SearchText
    End Sub
 

    Protected Sub Page_PreRender(ByVal sender As Object, _
                                 ByVal e As System.EventArgs) _
                                 Handles Me.PreRender
     If _selectedDate IsNot Nothing Then
         txtSearch.Text += _selectedDate.SelectedDate.ToShortDateString
     End If
    End Sub

  1. ConnectionConsumer özniteliğinin ilk argumanı consumer bağlantı noktası için bir isim tanımlar, ikinci arguman ise consumer bağlantı noktası için unique bir ID tanımlamasıdır.
  2. ConnectionConsumer attribute’ını bir consumer bağlantı noktası oluşturmak için kullanırken ve ISelectedDate arayüzünden gelen verileri alırken, alınan tarih bilgisi (google.ascx’teki) Page sınıfının PreRender olayında textbox’a yazacaktır.
  3. CalendarUC.ascx’i google webpart’ının olduğu WebPartZone1’e ekliyoruz. Source View’a geçerek kodun aşağıdaki gibi olduğundan emin oluyoruz.

<ZoneTemplate>

   <uc1:google ID="Google1" title="Google'a Sor" runat="server" />

   <uc2:CalendarUC ID="CalendarUC1" runat="server" />

</ZoneTemplate>

  1. WebPartManager kontrolünde aşağıdaki statik bağlantı satırlarını ekliyoruz:

        <asp:WebPartManager ID="WebPartManager1" runat="server">

        <StaticConnections>

            <asp:WebPartConnection ID="Connection" 

                    ProviderID="CalendarUC1"

                    ProviderConnectionPointID="SelectedDate"

                    ConsumerID="Google1"

                    ConsumerConnectionPointID="SelectedDate" />

        </StaticConnections>

        </asp:WebPartManager>

  1. F5’e basarak uygulamayı test ettiğimizde, Calendar’dan bir tarih seçtiğimizde Google WebPartında yer alan textbox’ta seçilen tarihin görüntülendiğini görebiliyoruz.


Peki uygulama çalışırken webpart’lar arasında bağlantıyı nasıl oluşturuyoruz? Şu ana kadar iki webpartı sadece tasarım aşamasında birbirine bağlamaktan bahsettik. Eğer sayfaya yeni eklenen bir webpart’ı farklı bir provider’a bağlamamız gerekirse? Bu durumda son kullanıcının (geliştiricinin değil) bağlantıy kurmasına izin vermemiz gerekecektir.

 

Şimdi adım adım ConnectionsZone kontrolünü kullanarak iki webpartı çalışma zamanında birbirine nasıl bağlayabileceğimizi göreceğiz.  Bu kontrolün (bana göre) en güzel özelliği, bize yapacak çok iş bırakmıyor olması.

  1. Google web user kontrolünü bir webpartzone’a ekliyoruz. Şu anda sayfada iki google search web partı ve bir calendar web partı olmalı..
  2.  İkinci aşamada sayfadaki boş bir alana bir adet ConnectionsZone kontrolü ekliyoruz.
  3. RadioButtonList kontrolünün kodlarına aşağıdaki;
    <asp:ListItem>Bağlantı Düzenleme Modu</asp:ListItem>
    SelectedIndexChanged olayına ise aşağıdaki satırı ekliyoruz..

      Case 4 : WebPartManager1.DisplayMode = _

      WebPartManager.ConnectDisplayMode

  1. Sayfayı test etmek için F5’e basıyoruz. Sayfa görüntülendiğinde Bağlantı Düzenleme Modu’nu tıklıyoruz ancak bir değişiklik gerçekleşmiyor.
  2. GoogleSearch webpartının menüsüne baktığımızda Connect linkini göreceğiz. Connect linkini tıklıyoruz.
  3. ConnectionsZone görüntüleniyor, buradan “Create a connection to a Provider”’ı seçiyoruz. Açılan listeden Calendar kontrolünü seçiyoruz..
  4. Ve sonuç:

Bu dizide özellikle portal geliştirme süreçlerinde oldukça kullanışlı olan webpart kontrollerini genel hatlarıyla ele aldık. Bu yazı dizisi “ASP.NET 2.0: A Developer's Notebook” kitabını kaynak alarak hazırlanmıştır..

Kadir Sümerkent
kadir@sumerkent.com