GridView kontrolüne kategori alt başlığı eklemek
Tarih 24 Ekim 2009 Cumartesi, 16:39 | Etiket(ler) Asp.Net
Yaptığım bir işte veri yapısı numerik kategorilere ayrılmış değildi. Bu nedenle verileri kategoriler şeklinde listeleyemiyordum. Fakat bunu yapmam gerekiyordu. Gridview yapısına programatik olarak nasıl ikinci bir başlık (header) ekleyebileceğimi düşünürken şöyle bir çözüme ulaştım.
Senaryomuzda aşağıdaki şekilde bir tablo var. Tablo adımız MUZISYENLER ve alanları şöyle
...ve bunu gridView kontrolüne aktardığımızda normalde aşağıdaki şekilde bir görüntü elde ediyoruz.
Sonuçta küçük değişikliklerle verilerimizi aşağıdaki şekilde göreceğiz.
Bunu nasıl yaptığıma bakalım. Aşağıdaki şekilde bir gridView oluşturun.
Daha sonra gridView 'e verileri gösterin. Bunun için şu kodu kullanabilirsiniz.
Dim Sql As String = "SELECT * FROM MUZISYENLER"
Dim Veritabani As New OleDbDataAdapter(Sql, ConfigurationManager.AppSettings("ConnectionString"))
Dim Cenk As New DataSet
Try
Veritabani.Fill(Cenk, "MUZISYENLER")
gvMuzisyen.DataSource = Cenk
gvMuzisyen.DataBind()
Catch ex As Exception
Response.Clear()
Response.Write(ex.Message)
Response.End()
Finally
Cenk.Clear()
Veritabani.Dispose()
End Try
Buraya kadar herşey normal şeklinde seyrediyor. Gelelim işin püf noktasına. Page_Load eventinin hemen üstüne
KategoriAdi adında bir Private String oluşturularım. Bunu gridView RowDataBound ederken kullanacağız.
Private KategoriAdi As String = ""
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Daha sonra gridView imizin RowDataBound eventine şu kodları yazalım.
Protected Sub gvMuzisyen_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvMuzisyen.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim dataRowCenk As DataRowView = e.Row.DataItem
If KategoriAdi <> dataRowCenk("KATEGORI").ToString Then
KategoriAdi = dataRowCenk("KATEGORI").ToString
Dim tablo As Table = e.Row.Parent
If Not IsDBNull(tablo) Then
Dim sutun As New GridViewRow(-1, -1, DataControlRowType.DataRow, DataControlRowState.Normal)
Dim hucre As New TableCell
hucre.ColumnSpan = gvMuzisyen.Columns.Count
hucre.BackColor = Drawing.Color.LightGray
Dim span As New HtmlGenericControl("span")
span.Style.Add("font-weight", "bold")
span.InnerHtml = KategoriAdi
hucre.Controls.Add(span)
sutun.Cells.Add(hucre)
tablo.Rows.AddAt(tablo.Rows.Count - 1, sutun)
End If
End If
End If
End Sub
Da da işte herşey bu kadar. tablo adında bir table oluşturup o andaki sutunu yakalıyoruz. sutun adında bir GridViewRow oluşturup başlığımızı nereye konumlandıracağımızı belirtiyoruz. hucre adındaki başlığımızı oluşturup biçimlendiriyoruz ve tam olarak nerede olması gerektiğini söylüyor ve ekliyoruz. Artık kategorileri tekrarlatmak zorunda kalmayacağız...
Projenin çalışan halini
buraya tıklayarak indirebilirsiniz.
Yorumlar
Tarih 02 Mart 2010 Salı, 14:30 | Yazan Süpersin

Tek kelimeyle süpersin! benimde hayatımı kurtardın ;)
teşekkürler
Tarih 08 Ocak 2010 Cuma, 15:38 | Yazan Junior Developer

Resmen hayatımı kurtardı! çok teşekkürler...
Yorum yazın
Geri Dön | Ana Sayfaya Dön