Makale Özeti

ASP.NET Ajax Control Toolkit kullanılarak yapılan projelerde karşımıza sıklıkla çıkan Akordiyon(Accordion) Kontrolü derinlemesine inceleyeceğiz.

Makale

ASP.NET Ajax Control Toolkit Akordiyon(Accordion) Kontrolü Kullanımı

ASP.NET Ajax Control Toolkit kullanılarak yapılan projelerde karşımıza sıklıkla çıkan Akordiyon(Accordion) Kontrolü derinlemesine inceleyeceğiz.


ASP.NET Ajax Control Toolkit Akordiyon(Accordion) kullanarak projemizde kayan paneller kullanabiliriz. Kayan panel kullanılan sayfaları ASP.NET Ajax Control Toolkit Akordiyon(Accordion) kontrolü kullanmadan da yapabilirdik fakat ASP.NET Ajax Control Toolkit bize bu yapıyı bir kontrol haline getirerek sunmaktadır.


Akordiyon(Accordion) kontrolünü kullanmak için öncelikle ASP.NET AJAX-Enabled Web Site oluşturmalıyız. ASP.NET AJAX-Enabled Web Site oluşturarak web.config dosyasını ajax altyapısına göre oluşturup her yeni oluşturulan sayfanın ajax kullanabilmesi için gerekli olan ScriptManager ı otomatik olarak sayfaya gömüyor. Eğer ASP.NET AJAX-Enabled Web Site oluşturmadıysanız tüm bu işlemleri elle ayarlayarak web sitenızda ajax control toolkit kullanabilirsiniz. Toolbar'ınıza daha önce ASP.NET Ajax Control Toolkit kontrollerini yüklememisseniz www.asp.net sayfasından gerekli yazılımları indirerek ve referans olarak AjaxControlToolkit.dll'ini vererek tüm kontrolleri toolbar'ınıza getirebilirsiniz.
 



Toolbar dan Accordion kontrolünü sayfanıza yüklediğinizde otomatik olarak AjaxControlToolkit.dll de projenize eklenecektir .Accordion kontrolünün içerisine  AccordionPane'ler ekleyerek sayfanızı statik olarak oluşturabilirsiniz.
Aşağıda aspx dosyası üzerinde kontrolün eklenmiş hali gözükmektedir.

<ajaxToolkit:Accordion
    ID="MyAccordion"
    runat="Server"
    SelectedIndex="0"
    HeaderCssClass="accordionHeader"
    HeaderSelectedCssClass="accordionHeaderSelected"
    ContentCssClass="accordionContent"
    AutoSize="None"
    FadeTransitions="true"
    TransitionDuration="250"
    FramesPerSecond="40"
    RequireOpenedPane="false"
    SuppressHeaderPostbacks="true">
    <Panes>
        <ajaxToolkit:AccordionPane
            HeaderCssClass="accordionHeader"
            HeaderSelectedCssClass="accordionHeaderSelected"
            ContentCssClass="accordionContent">
            <Header> . . . </Header>
            <Content> . . . </Content>
        </ajaxToolkit:AccordionPane>        
        .
        .
        .
    </Panes>            
    <HeaderTemplate>...</HeaderTemplate>
    <ContentTemplate>...</ContentTemplate>
</ajaxToolkit:Accordion>



Accordion Kontrolünün özelliklerinden bahsedecek olursak:


    SelectedIndex: Sayfa ilk açıldığında seçili olan panel numarasını tutar
    HeaderCssClass: Kontrolün header için css'i tutar. Ayrıca AccordionPane kontrolünde de bu özellik vardır.
    HeaderSelectedCssClass: Seçili olan panelin header için css dosyasını tutar.
    ContentCssClass: Panel içerisindeki verinin css dosyasını tutar.   
    FadeTransitions: Seçilen panele fade(solukluk) özelliğinin verilmesini sağlar.
    TransitionDuration:Panel hareket animasyonunun süresini tutar   
    FramesPerSecond :Animasyon sırasında kullanılacak frame sayısını tutar
    AutoSize :None,Limit,Fill değerlerini alır, kontrolün büyüklüğü üzerine kısıtlar getirir.   
    RequireOpenedPane: Açık olan panelin headerına basıldığında kapanmasını önler.
    SuppressHeaderPostbacks: Başlık içerisinde client side kullanılan taglerin kullanılmasını sağlar.
    Panes: AccordionPaneleri içerir
    HeaderTemplate ve ContentTemplate: Başlığa ve içeriğe veri eklenirkenki görüntüyü saklar
DataSource DataSource: Veri kaynağı ekleneceği zaman kullanılır.
    DataSourceID - Veri kaynağına kimlik vermek için kullanılır.
    DataMember - Veri kaynağı verilirkenki üyeyi tutar .(Dataset içerisindeki DataTable ismi gibi..)

Öncelikle statik olarak Accordion ve AccordionPane'ımızı oluşturalım.

 

<cc1:Accordion ID="Accordion1" runat="server" AutoSize="None" FadeTransitions="true" HeaderCssClass="accordionHeader" HeaderSelectedCssClass="accordionHeaderSelected"            ContentCssClass="accordionContent" TransitionDuration="250" FramesPerSecond="40"RequireOpenedPane="false" SuppressHeaderPostbacks="true">
    <Panes>
        <cc1:AccordionPane ID="AccordionPane1" runat="server">
            <Header>1 Header</Header>
            <Content>Birinci Header Content<br> </Content>
        </cc1:AccordionPane>
        <cc1:AccordionPane ID="AccordionPane2" runat="server">
            <Header> 2 Header</Header>
            <Content>İkinci Header Content<br>  </Content>
        </cc1:AccordionPane>
        <cc1:AccordionPane ID="AccordionPane3" runat="server">
            <Header>3 Header</Header>
            <Content>Üçüncü Header Content<br></Content>
        </cc1:AccordionPane><cc1:AccordionPane ID="AccordionPane4" runat="server">
            <Header>4 Header</Header>
            <Content>Dördüncü Header Content<br></Content>
        </cc1:AccordionPane>
    </Panes>
</cc1:Accordion>


 

Yaptığımız sayfa aşağıdaki gibi çalışacaktır.


Server side üzerinden run time da dinamik olarak Panellerimizi oluşturmak için:

aspx dosyası üzerindeki accordion kontrolu;

<cc1:Accordion ID="MyAccordion" runat="server" AutoSize="None" FadeTransitions="true"
HeaderCssClass="accordionHeader" HeaderSelectedCssClass="accordionHeaderSelected"
ContentCssClass="accordionContent" TransitionDuration="250" FramesPerSecond="40"
RequireOpenedPane="false" SuppressHeaderPostbacks="true">
   
<
Panes>
   
</
Panes>
</
cc1:Accordion>

.cs dosyası
           

using System;
using System.Data;
using System.Configuration;
using System.Collections;
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;
using AjaxControlToolkit;

public partial class _Default3 : System.Web.UI.Page{
   
protected
void Page_Load(object sender, EventArgs e){

   
    AccordionPane ap01 = new AccordionPane();
   
    ap01.HeaderContainer.Controls.Add(new LiteralControl("1 Header"));
   
    ap01.ContentContainer.Controls.Add(new LiteralControl("Birinci Header Content"));
   
    MyAccordion.Panes.Add(ap01);
   
    AccordionPane ap02 = new AccordionPane();
   
    ap02.HeaderContainer.Controls.Add(new LiteralControl("2 Header"));
   
    ap02.ContentContainer.Controls.Add(new LiteralControl("İkinci Header Content"));
       
MyAccordion.Panes.Add(ap02);
   
    AccordionPane ap03 = new AccordionPane();
       
ap03.HeaderContainer.Controls.Add(new LiteralControl("3 Header"));
   
    ap03.ContentContainer.Controls.Add(new LiteralControl("Üçüncü Header Content"));
   
    MyAccordion.Panes.Add(ap03);
   
    AccordionPane ap04 = new AccordionPane();
   
    ap04.HeaderContainer.Controls.Add(new LiteralControl("4 Header" ));
   
    ap04.ContentContainer.Controls.Add(new LiteralControl("Dördüncü Header Content"));
   
    MyAccordion.Panes.Add(ap04);}}

şeklinde olmalıdır.

DataSource vererek panelleri oluşturmak için:

<form id="form1" runat="server"><asp:ScriptManager ID="ScriptManager1" runat="server" />
   
<cc1:Accordion ID="Accordion1" runat="server" AutoSize="None"
   
    FadeTransitions="true" TransitionDuration="250" FramesPerSecond="40"
   
    RequireOpenedPane="false" SuppressHeaderPostbacks="true"
   
    DataSourceID="SqlDataSource1" >
       
       
<HeaderTemplate>
           
<%#Eval("Header") %>
       
</HeaderTemplate>
       
<ContentTemplate>
           
<%# Eval("Content") %>
       
</ContentTemplate>
   
</cc1:Accordion>
   
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ConnectionStrings:HomesiteConnectionString2 %>"
       
SelectCommand="SELECT [Header], [Content] FROM [Blog_]">
   
</asp:SqlDataSource>
</form>

şeklinde olmadır.

Makale ya da kodlarda bulunan hatalar ya da sorularınız için mehmetaliecer@gmail.com adresinden bana ulaşabilirsiniz.İyi çalışmalar.

Mehmet Ali ECER

www.mehmetaliecer.com

Program Kodu