GridView Dynamic BoundField

Bazen öyle durumlara maruz kalıyoruzki ne item templete kullanarak nede diğer yöntemler ile GridView imize data basamıyacak hallere bürünüyoruz. Aşağıdaki örnek alen
12 ay boyunca dinamik olarak ayarlanmıştı önceleri ama daha sonra ekrana sığmadığı için son 4 ayın verileri basılmak üzere elle manuel olarak devam etmektedir.

Öncelikle GridView controlumuzün datasource nesnesi ile databind işlemine hazır hale getiriyoruz.

  protected void Page_Load(object sender, EventArgs e)
    {
         DbTools db = new DbTools();

        GridView1.DataSource = db.GenelDataSource("SELECT * FROM  dbo.kp ORDER BY  dbo.kp.sira");
      
     /* 
 bind işleminden önce dinamik filedlarımızı yaratan fonksiyonumuzu çağırıyoruz.
*/
       GetGVHeader();

   /*
 her zamanki gibi bind işlemini gerçekleştiriyoruz.
*/
        GridView1.DataBind();
        
    }

Evet asıl olay zaten burada başlıyor . bu sayfada bana gerekli olan 12 ayın verısını clomun bazında basan bir grid idi.( En son modifikasyonda 4 ayı ekrana basmakta)
O yüzden öncelikkle bana current ay yıl verısı ve datadan gelen field isimleri lazım olacaktı.


  /* 
Bu gunun ayı ve yılını set et
*/

        int current_ay = DateTime.Now.Month;
        string current_year = DateTime.Now.Year.ToString() ;
    
       /*
 içinde bulunduğumuz senenin bir oncekı senesi lazım olacağı için manuel olarak bır oncekı yılı set edıyoruz. Raporlamada ıcınde bulundugunuz ayın bır verısı olmıyacagı ıcın eger subat ayında ısenız sıze ocak 2010 - aralık 2009 - kasım 2009 ve ekim 2009 verılerı lazım olacak bunu ayarlamak ıcın bır oncekı yılı set ettık. 
*/

       int ly = Convert.ToInt32(current_year) - 1;
        
        string last_year = ly.ToString();
     

        /*
 bu aydan onceki bir aydan basla 
         GV ye olusturacagımız 4 kolonun aylarını ayarlıyoruz
*/
        int period1_ay = current_ay - 1;
        int period2_ay = period1_ay - 1;
        int period3_ay = period2_ay - 1;
        int period4_ay = period3_ay - 1;


/*
GV headerını degıstırmek ıcın 12 ayın türkçe olarak kısaltılmıs hallerını strıng arrayımıze set edıyoruz        
*/
string[] aylar = new string[12];

            aylar[0] = "Oc";
            aylar[1] ="Şb";
            aylar[2] ="Mr";
            aylar[3] ="Ni";
            aylar[4] ="My";
            aylar[5] ="Hz";
            aylar[6] ="Tm";
            aylar[7] ="Ağ";
            aylar[8] ="Ey";
            aylar[9] ="Ek";
            aylar[10] ="Ks";
            aylar[11] = "Ar";

/*
 12 aya tekabul eden 12 db fıled namı ını set edıyoruz
*/
       string[] dFields = new string[12];

       dFields[0] = "sayi";
       dFields[1] = "sayi1";
       dFields[2] = "sayi2";
       dFields[3] = "sayi3";
       dFields[4] = "sayi4";
       dFields[5] = "sayi5";
       dFields[6] = "sayi6";
       dFields[7] = "sayi7";
       dFields[8] = "sayi8";
       dFields[9] = "sayi9";
       dFields[10] = "sayi10";
       dFields[11] = "sayi11";



/* 
bu kısma kadar hersey normal sekılde seyredıyor ve bundan sonra yapamız gereken sadece bır   BoundField  yaratmak 
 */      


        BoundField bf1 = new BoundField();
        bf1.HeaderText = aylar[9].ToString() + "/" + current_year;
        bf1.DataField = dFields[9].ToString();
        DataControlField dc1 = bf1;
        GridView1.Columns.Add(dc1);


/*
 Aslına bakarsanız bu bır for dongusu ılede yapılabılır dahada kısaltılabılır ama onemlı olan ne kadar duzgun kod yazarsanız yazın ısınızın bır sekılde gorulmesıdır. optımızasyon ıcın daha sonra donup tekrar ırdelemenız mumkun 
*/
        BoundField bf2 = new BoundField();
        bf2.HeaderText = aylar[8].ToString() + "/" + current_year;
        bf2.DataField = dFields[8].ToString();
        DataControlField dc2 = bf2;
        GridView1.Columns.Add(dc2);


        BoundField bf3 = new BoundField();
        bf3.HeaderText = aylar[7].ToString() + "/" + current_year;
        bf3.DataField = dFields[7].ToString();
        DataControlField dc3 = bf3;
        GridView1.Columns.Add(dc3);


        BoundField bf4 = new BoundField();
        bf4.HeaderText = aylar[6].ToString() + "/" + current_year;
        bf4.DataField = dFields[6].ToString();
        DataControlField dc4 = bf4;
        GridView1.Columns.Add(dc4);



        
    }


en son olarak hazırladıgımız GridView ‘in nasıl göründüğüne bir bakalım isterseniz ..

asp.net gridview custom column

basit olarak bir GV icine custom BoundField olusturmaya örnektir. Daha detaylı şeyleri yaratmak ve kodlamak sizin hayal gücünüze bağlı umarım şimdiden herkes için faydalı bir örnek olur.

Leave a Reply