Makale Özeti

Bu makalede GridView kontrolüne GridViewRow objesi kullanılarak dinamik olarak satır ekle işlemi anlatılacaktır.

Makale

GridView Kontrolüne GridViewRow Kullanarak Satır Eklemek

GridView veri kontrolüne dinamik olarak satır ekleyip, bu satırlarla istediğimiz gibi oynayabilme şansına sahibiz. Bunun için GridView’e ait olan GridViewRow objesinin iyi bilinmesi yeterli olacaktır. Bu sebeple ilk olarak bu özelliği ayrıntılı bir şekilde tanımakta fayda bulunmaktadır.
GridViewRow’un yapıcı metodu aşağıdaki gibidir:
Public GridViewRow ( int rowIndex, int dataItemIndex, DataControlRowType, DataControlRowState)

GridView de bulunan her bir satırı oluşturmak için GridViewRow objesi kullanılır . Bir GridViewRow objesine ait satır türünü “RowType” özelliği belirler. Var olan “RowType” lar şunlardır:

Satır Türü Açıklaması
DataGridRowType.DataRow GridView kontrolünde bulunan veri satırı
DataGridRowType.Footer GridView kontrolünde bulunan sayfa altlığı satırı
DataGridRowType.Header GridView kontrolünde bulunan başlık satırı
DataGridRowType.NullRow GridView kontrolünde bulunan boş (null) satır. GridViwde gösterilecek bir kayıt bulunmadığı zaman null satır görünür.
DataGridRowType.Pager GridView kontrolünde bulunan sayfalama satırı
DataGridRowType.Separator GridView kontrolünde bulunan ayırıcı satırı


Ayrıca bir GridViewRow objesine ait satır durumu da belirlenebilir:

Satır Durumu Açıklama
DataControlRowState.Alternate GridViewRow objesinin alternatif satır olduğunu belirtir
DataControlRowState.Edit GridViewRow objesinin düzenleme modunda olduğunu belirtir
DataControlRowState.Normal GridViewRow objesinin varsayılan (normal) satır olduğunu belirtir
DataControlRowState.Selected GridViewRow objesinin seçilmiş satır olduğunu belirtir.


Gridview kontrolü tüm veri satırlarını “Rows” koleksiyonuna yükler. Bir GridViewRow objesinin indeksini belirlemek için “RowIndex” özelliği kullanılır. GridViewRow objesine bağlanmış bir veriye “DataItem" özelliğini kullanarak erişmek mümkündür. GridViewRow objesine ati olan her bir hücreye “Cells” özelliği kullanarak erişilebilmektedir. Şayet hücrenin içersinde bir kontrol varsa bu kontrole “Controls” koleksiyonu kullanarak, kontrol “ID” ye sahipse de “FindControl” methodu kullanılarak kontrolle ulaşılır. Şayet alanlarınızı “BoundField” kullanarak doldurmuşsanız cell ‘in Text özelliği kullanılarak alanın değeri alınır.

Kısaca GridViewRow objesini öğrendikten sonra örneklere geçilebilir. İlk örnekte ana kategori altında alt kategoriler listelenecek ve ana kategoriye göre de gruplama işlemi yapılacaktır. GridView kontrolü istenildiği gibi dizayn edilir. Kategori işlemini gerçekleştirmek için GridView’e ait olan RowDataBound methodu kullanılır. Kod satırlarına ait açıklamalar, kodların üzerinde bulunmaktadır.

string m_kategoriAd = String.Empty;

protected void GridViewAnaSayfa_RowDataBound(object sender, GridViewRowEventArgs e)
{
  //GridViewRow biligisi alınır
  GridViewRow gvr = e.Row;

   //Şayet satır veri satırı ise işlem yap
  if (gvr.RowType == DataControlRowType.DataRow)
  {
     //Veritabından veri almak için DataRowView tanımlanır.
    DataRowView drv = gvr.DataItem as DataRowView;

     //Eğer veritannından alınan bilgi “AnaKategoriAd” ise bu sütündaki değeri kategoriAd stringine ata.
    string kategoriAd = drv["AnaKategoriAd"].ToString();
     //Okunan kategoriAd bilgisi daha önceden kullanılmış mı kontrol edilir. Eğer daha onceden bu veri için bir işlem yapılmamıs ise if bloguna girilir ve yeni satır oluşturulur.
    if (!kategoriAd.Equals(m_kategoriAd))
    {
        //Yenibir GridViewRow oluşturulur. Oluşturulan satırın tipi header(başlık) tır.  
       GridViewRow row = new GridViewRow(0, -1, DataControlRowType.Header, DataControlRowState.Normal);
       //Yeni bir hücre oluşturulur
       TableCell cell = new TableCell();
        //GridView’a ait sutun sayısı columnspan değerine atanır. Böylelikle sütünların arasında bulunan çizgiler gözükmeyecektir.
       cell.ColumnSpan = GridViewAnaSayfa.Columns.Count;
        //Hücreye eklenen bilgiyi sola daya.
       cell.HorizontalAlign = HorizontalAlign.Left;
        //Hücereye metin olarak katagoriAd stringi atanır
       cell.Text = String.Format("{0}", kategoriAd);
        //Oluşturulan hücre satıra eklenir.
       row.Cells.Add(cell);
       //Oluşturulan hücre gridviewe eklenir
      GridViewAnaSayfa.Controls[0].Controls.AddAt(GridViewAnaSayfa.Controls[0].Controls.Count - 1, row);
        //oluşturulmus kategoriAd bilgisi m_kategorisAd stringine atanıp bir daha işlem yapılmaması sağlanır
       m_kategoriAd = kategoriAd;
    }
        
 }

}
Sonuç aşağıdaki gibi olacaktır:


İkinci örnek ise Gridview kontrolüne dinamik olarak başlık eklemedir. Bu örnek içinde GridView’e ait olan RowDataBound methodu kullanılır.
String baslik= Request.QueryString["CategoryId"];
protected void GridViewCategory_RowDataBound(object sender, GridViewRowEventArgs e)
{
    //Row bilgisi alınır
   GridViewRow gvr = e.Row;

    //Satırı Header ise işlem yap.
   if (gvr.RowType == DataControlRowType.Header)
   {
     //Yeni bir başlık satırı oluşturulur.
     GridViewRow rowHeader = new GridViewRow(0, 0,DataControlRowType.Header, DataControlRowState.Normal);
     //Literal kontrolü oluşturulur
    Literal newCells = new Literal();
     //Başlık bilginizi bu kontrolün metin bilgisine aktarılır
    newCells.Text = baslik;
     //Yeni bit başık hücresi oluşturulur
    TableHeaderCell headerCell = new TableHeaderCell();
     //Literal kontrolü hücreye eklenir.
    headerCell.Controls.Add(newCells);
     //GridView sütun sayısı hesaplanır ve hücrenin columnspan değerine atanır.
    headerCell.ColumnSpan = GridViewCategory.Columns.Count;
     //Oluşturulan hücre GridviewRow a eklenir
    rowHeader.Cells.Add(headerCell);
    rowHeader.Visible = true;
     //Yeni oluşturulan hücre GridView e eklenir. 
    GridViewCategory.Controls[0].Controls.AddAt(0, rowHeader);

   }
}
Sonuç aşağıdaki gibi olacaktır:


Özlem Arslan
ce.ozlemarslan@gmail.com

Kaynaklar:
msdn.com
forum.asp.net