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

Capthca Karakterleri kutuya giriniz
Kodu değiştir...


Geri Dön   |   Ana Sayfaya Dön