Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Caner Şahan
Caner Şahan
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
24 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: button buttonuna dinamik dizisi dizisini ekleyerek elemanli for(int kontrol kontrollerin sayfanin server tarafli textbox zamaninda ASP.NET Caner Şahan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : ASP.NET
Yayınlanma Tarihi : 12.1.2005
Okunma Sayısı : 49500
Yorum Sayısı : 2     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Burak Selim Şenyurt
Kurumsal Yazılımcının Oyun Geliştirme ile İmtihanı 28.3.2024
Burak Selim Şenyurt
Matematik ve Oyun Programlama - Missile Command - Final 28.3.2024
Turhal Temizer
Conda install environment.yml Package 28.3.2024
Turhal Temizer
Mac OS/X Removing CUDA 28.3.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
ASP.NET'te Dinamik Olarak Kontrol Eklemek
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Bu yazımızda ASPNET ile dinamik kontrollerin nasıl yaratılarak,kullanıldığına değineceğiz. Öncelikle dinamik kontrollerle neden bahsettiğimizi açıklayalım. Web Forms’un server taraflı çalışan üyelerinden bahsediyorum. Yani bir Label,TextBox yada herhangi bir server kontrol olabilir. Makalemizde Web uygulamamıza çalışma zamanında label dizisi ve textbox dizisini ekleyerek bu textbox içine girilen stringleri alıp ListBoxItems’a ekleyerek konuyu pekiştirmeye çalışacağız.

Öncelikle Server taraflı çalışacak kontrolü(mesala Label) sayfaya eklememiz için bir nesne olarak onu belirtmemiz gerekir. Belirtmiş olduğumuz bu nesneyi Page özelliğinin Controls özelliğinin add methodu ile içine eklemeliyizki sayfanın çalışma anında kontrol eklendiğinden haberi olsun ve tekrar tetiklensin.

Label label1=new Label(); Page.Controls.Add(label1);
Öncelikle sayfamıza bir button ekleyerek bu butona 10 elemanlı bir label dizisini panel(Labelpanel) kontrolümüze ekleyen fonksiyonu inceleyelim:

private void labelekle()
{
         int uste_uzaklik=30;
         Label [] labelarray=new Label[10];
         for(int i=0;i<labelarray.Length;i++)
         {
                labelarray[i]=new Label();
                labelarray[i].Style["Position"]="Absolute";
                labelarray[i].Style["Top"]=uste_uzaklik.ToString()+"px";
                labelarray[i].Style["Left"]="100px";
                labelarray[i].Font.Bold=true;
                labelarray[i].Font.Name="Verdana";
                labelarray[i].ID=i.ToString();
                labelarray[i].Text=labelarray[i].ID+".Label:";
                Labelpanel.Controls.Add(labelarray[i]);
                uste_uzaklik+=30;
         }
}
Yukarıdaki kodu incelediğimiz zaman labelarray adında 10 elemanlı bir  Label dizisi oluşturmaktayız. Fakat bu diziyi oluşturmamız her dizi elemanı için bir nesne tanımladığımız anlamına gelmez. Bunun için döngü başlangıcında dizinin her elemanı için bir nesne tanımlamamız gerekmektedir. Daha sonra ise yaratılan nesneye çeşitli özellikleri verilerek Panele(Labelpanel) yerleştiriliyor. uste_uzaklik degiskeni ise her labelin üste olan uzaklığını ölçüm için kullandığımız bir değişkendir. Ve son olarakta  bu yarattığımız kontrolü Labelpanel’in Controllerine ekliyoruz. Label ekle buttonun olayı sonucu meydana gelen sonuç aşadaki resimde gözükmektedir.



şekil 1:Labellerin dinamik olarak eklenmesi

Şimdide senaryomuzun ikinci kısmına geçelim. Bu kısımda TextBox ekleme buttonuna tıklayarak labellerin karşılarına bir TextBox  ekleyerek en sona da dinamik bir button ekliyoruz. Kodumuzu incelersek Label eklemeye(labelekle()) çok benzediğiniz görüceksiniz:

private void textboxekle()
{
             int uste_uzaklik=30;
             TextBox [] textboxarray=new TextBox[10];
             for(int i=0;i<textboxarray.Length;i++)
             {
                  textboxarray[i]=new TextBox();
                  textboxarray[i].Style["Position"]="Absolute";
                  textboxarray[i].Style["Top"]=uste_uzaklik.ToString()+"px";
                  textboxarray[i].Style["Left"]="100px";
                  textboxarray[i].Font.Bold=true;
                  textboxarray[i].Font.Name="Verdana";
                  textboxarray[i].ID=i.ToString()+"txt";
                  TextBoxpanel.Controls.Add(textboxarray[i]);
                  uste_uzaklik+=30;
             }
            Button bt=new Button();
            bt.Style["Position"]="Absolute";
            bt.Style["Top"]=uste_uzaklik.ToString()+"px";
            bt.Style["Left"]="100px";
            bt.Text="Bitti";
            bt.Click+=new EventHandler(this.bt_click);
            TextBoxpanel.Controls.Add(bt);
}
private void bt_click(object o,EventArgs args)
{
}


şekil 2:Textboxların eklenmiş hali.

Şu ana kadar herşey yolunda gidiyor değil mi. Ama birde Bitti buttonuna veya başka bir buttona bastığımızı düşünelim. Çalışma zamanında yaratmış olduğumuz bütün dinamik kontrollerin yok olduğunu görüceksiniz. Bunun nedeni; istemcinin sunucudan bir istekde bulunması ve sayfanın buna cevap verirken tekrardan yüklenmesidir. Bunu önlemek için labelekle() ve textboxekle() fonksiyonlarımızı Oninit olayında çağırmak ve sayfa yüklenirken kontrollerinde yüklenmesini sağlamak.

override protected void OnInit(EventArgs e)
{
         labelekle();
         textboxekle();
         InitializeComponent();
         base.OnInit(e);
}
Projemizi bu şekliyle derlediğimiz zaman Textboxları ekle ve Labelleri ekle buttonlarına basmadan eklemiş olacağız. Birde dinamik olarak eklediğimiz bt buttonunun olayını incelersek:

private void bt_click(object o,EventArgs args)
{
        TextBox txt = null;
        for (int i=0;i<TextBoxpanel.Controls.Count;i++)
         {
               string panelid=TextBoxpanel.Controls[i].ID;
                    for(int j=0;j<10;j++)
                       {
                            string idkey="txt";
                            idkey+=j.ToString();
                            if(panelid==idkey)
                             {
                                  txt=(TextBox)TextBoxpanel.Controls[i];
                                  ListBox1.Items.Add(txt.Text);
                                  txt.Enabled=false;
                                  txt.BackColor=Color.Red;
                             }
                       }
          }
}
  Burdaki mantıkta ise panellere eklediğimiz kontrolleri id’lerine göre karşılaştırdıktan sonra kendi türünden kontrole dönüştürerek özelliklerinden yararlanılmıştır.



şekil:3 sayfanın Oninit olayını çağırdıktan sonraki hali



şekil:4 sayfadaki Bitti buttonuna basınca aldığı hal.

örnek uygulama kodları için

İyi Çalışmalar.

Makale:
ASP.NET'te Dinamik Olarak Kontrol Eklemek ASP.NET Caner Şahan
  • Yazılan Yorumlar
  • Yorum Yaz
EKİ
11
2011
Ellerinize sağlık. hakkaten güzel bir çalışma olmuş çoook faydalı oldu. çok teşekkürler.
EKİ
11
2011
Ellerinize sağlık. hakkaten güzel bir anlatım olmuş çoook faydalı oldu. çok teşekkürler.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor