Makale Özeti

Çoğu zaman uygulamalarımızda esnek ihtiyaçları karşılıyabilmek açısından kontrollerimizi dinamik olarak oluşturma ihtiyacı duyarız . Makelemizde de konu olarak ,çalışma zamanında ASP.NET GridView içinde template kolonların yaratılmasını inceleyecez . Konu olarak template kolonları seçmemin nedeni ise diğer kontrollere veya en azından kolon tiplerine göre daha fazla emek istemesi ve karmaşıklık içermesidir .

Makale

Çoğu zaman uygulamalarımızda esnek ihtiyaçları karşılıyabilmek açısından kontrollerimizi dinamik olarak oluşturma ihtiyacı duyarız . Makelemizde de konu olarak ,çalışma zamanında ASP.NET GridView içinde template kolonların yaratılmasını inceleyecez . Konu olarak template kolonları seçmemin nedeni ise diğer kontrollere veya en azından kolon tiplerine göre daha fazla emek istemesi ve karmaşıklık içermesidir .

Normalde bir grid içerisinde ,çalışma zamanında dahi olsa, bir kolon eklemek basit bir işlemdir. Fakat iş template kolonlara gelince o kadar da kolay olmamakta .  Bunun nedeni ise template özellikte olan özelliklerin ItemTemplate,InsertItemTemplate,EditItemTemplate gibi ITemplate  arayüzünü uygulayan  nesneler içermesidir . Gridimizi kullanacağımız moda göre uygun olan template özelliğini giydirmemiz gerekmekte.

Önceden de belirttiğim gibi bu özellikler  ITemplate  arayüzünü uygulayan tiplerden örnekleri değer olarak alabilmektedir . ITemplate arayüzü System.Web.UI namespace içinde yer almaktadır ve tanımı şu şekildedir :

 

public interface ITemplate

{

      void InstantiateIn(Control container)

}

 

            Bu metod gridin (veya başka bir DataBound kontrolün) DataBinding olayı ile beraber çağrılmaktadır . İçerisinde  ,oluşturulacak kontrolü veya kontrolleri container’a ekleyebiliriz

           

public class CheckBoxTemplate : ITemplate

{

    private string _kolonAdi;

    private bool _autoPostBack;

 

      public CheckBoxTemplate(string kolonAdi,bool autoPostBack)

      {

        _kolonAdi = kolonAdi;

        _autoPostBack = autoPostBack;

      }

 

    #region ITemplate Members

 

    public event EventHandler CheckedChanged;

 

    public void InstantiateIn(Control container)

    {

        CheckBox chk = new CheckBox();

        chk.CheckedChanged += new EventHandler(chk_CheckedChanged);

        chk.DataBinding += new EventHandler(chk_DataBinding);

        container.Controls.Add(chk);

    }

 

    void chk_CheckedChanged(object sender, EventArgs e)

    {

        if (CheckedChanged != null)

            CheckedChanged(sender, e);

    }

 

    void chk_DataBinding(object sender, EventArgs e)

    {

        CheckBox chk = (CheckBox)sender;

        GridViewRow satir = (GridViewRow)chk.NamingContainer;

 

        chk.Checked = (bool) DataBinder.Eval(satir.DataItem,_kolonAdi);

        chk.AutoPostBack = _autoPostBack;

    }

 

    #endregion

}

            Örneğimizde bir ToDo listesi oluşturdum . Bir drop down kontrolünden kaç günlük(geçmişe dair) ToDo’larımızı görmek istediğimize dair bir değer seçerek bu günlere ait ToDo’ları ayrı ayrı gridlerde listeleyip , tamamlandıklarında yanlarındaki check box’ları güncelliyebiliyoruz. Özellikle ItemTemplate’i kullandığıma dikkatinizi çekmek isterim. Bu sayede gridi edit  moda çevirmeden grid üzerinde gerekli değişiklikleri de yapabilmekteyim .

 

 

Kodların tamamı ektedir .

 

Sorularınız için : kutlu.arasli@netron.com.tr

 

 

 

Kodlar