Linklerim
İstatistikler
Ziyaretçi Sayısı:7794
Sayfa Görüntüleme Sayısı:35889
Makale Sayısı:24
Yorum Sayısı:58

Asp.net’te Repeater yada Datalist gibi kontrolleri sanırım kullanmayan yoktur. Peki böyle bir kontrolü kendimiz nasıl yazabiliriz ve daha da geliştirebiliriz bu makalede bunu inceliyeceğiz.
Bu kontrolu yazarken .NET kütüphanleri içerisinde tanımlı olan CompositeDataBoundControl
Class’ı kontrolumuz için base class olacak. CompositeDataBoundControl’ı inceliyecek olursanız (VS’de üzerinde sağ click Go To Definition diyerek) InamingContainer interface’inden kalıtım aldığını göreceksiniz. Bu interface sayesinde Kontrolumuzun template’ine eklediğimiz her kontrol unique ID’ye sahip olacak. Örneğin Datalist’in ItemTemplate’i içerisine Label koydunuz ve veri kaynağına bağladınız diyelim. Uygulamanızı çalıştırıp HTML source’unu kontrol ederseniz Datalist içeriğindeki Label’ların unique ID aldığını görürsünüz.
 
Visual Studio’da yeni bir ASP.NET Server Control Uygulaması başlatın.
[ToolboxData("<{0}:SNNRepeater runat=server></{0}:SNNRepeater>")]
    [Designer(typeof(HtmlControlDesigner))]
    public class SNNRepeater : CompositeDataBoundControl
    {
 
        private ITemplate temp;
 
        [Browsable(false)]//properties ekranında gözükmemesi için
        [PersistenceMode(PersistenceMode.InnerProperty)]
        public ITemplate SNNTemplate
        {
            get { return temp; }
            set { temp = value; }
        }
 
        protected override int CreateChildControls(IEnumerable kaynak, bool bagla)
        {
            int adet = 0;
            if (bagla)// Eğer Veri kaynağına bağlanmışsa
            {
                foreach (object elemanlar in kaynak)//kaynaktaki tüm elemanları gezip
                //Template'imize dolduruyoruz.
                {
                    //Template'imize ekliyeceğimiz item Eleman tipinde olmalıdır.
                    Eleman eleman = new Eleman(elemanlar, adet++);
                    SNNTemplate.InstantiateIn(eleman);
                    this.Controls.Add(eleman);
                    eleman.DataBind();
 
                }
 
            }
            return adet;
        }
    }
    public class Eleman : Control, IDataItemContainer
    {
        private object _eleman;
        //IDataItemContainer interface'inden kalıtım aldıktan sonra
        //içerisindeki property'leri override ediyoruz.
        public Eleman(object dataItem, int index)
        {
            _eleman = dataItem;
        }
        public object DataItem
        {
            get { return _eleman; }
        }
        public int DataItemIndex
        {
            get { return 0; }
        }
        public int DisplayIndex
        {
            get { return 0; }
        }
    }
 
Daha sonra kontrolu derleyelim ve Visual Studio’da yeni bir ASP.NET Web Site başlatarak test edelim.
<cc1:SNNRepeater ID="SNNRepeater1" runat="server" DataSourceID="SqlDataSource1">
    <SNNTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("ad") >'></asp:Label><br />
    </SNNTemplate>
    </cc1:SNNRepeater>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server"
    ConnectionString="<%$ ConnectionStrings:zbConnectionString %>"
    SelectCommand="SELECT [ad] FROM [Basliklar]"></asp:SqlDataSource>
 
Uygulamanızı çalıştırdığınızda sonuç aşağıdaki gibi olmalıdır.



Kimden:  

Yorumunuz:
 
Yorumunuz 255 karakterden fazla olamaz!