Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887

    [1.1] Header aggiuntiva per Datagrid

    Raga, dovrei aggiungere una header (oltre a quella ufficiale) ad un DG per evidenziare raggruppamenti di colonne. E' possibile ? Suggerimenti ?

  2. #2
    Utente di HTML.it L'avatar di Nazareno
    Registrato dal
    Mar 2001
    residenza
    Udine
    Messaggi
    176

    No...

    La DataGrid è molto limitata. Dovresti utilizzare grid di terze parti che lotre ai raggruppamenti hanno un sacco di altre funzionalità come le sottogrid, i filtri con drag & drop, ecc...

  3. #3
    "...non è detto che sia tardi se non guardi che ora è..."

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da Nazareno
    La DataGrid è molto limitata. Dovresti utilizzare grid di terze parti che lotre ai raggruppamenti hanno un sacco di altre funzionalità come le sottogrid, i filtri con drag & drop, ecc...

    Ma dai, su che non è così limitato

    Con un po' di buona volontà se ne possono cavare tante cose

    Comunque, gentilissimo djciko hai preso in considerazione la possibilità di costruirti l'html della tabella da programma, lasciando a perdere DataGrid e similari?

    Nota che si può replicare molto bene un report tipo Access, con Intestazioni, gruppi, sottogruppi, totali, subtotali, dettagli ect etc

    Basta pigliare una tabella ordinata, scandire recor per record, tenere conto della rottura dell'indice etc etc

    ps. se vuoi proprio un DataGrid o un GridView, spiega un po' meglio cosa vuoi, che ci proviamo

    Pietro

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Innanzitutto grazie a Raffaello per l'esempio postato, è una valida soluzione.
    Partendo da qui > http://www.codeproject.com/aspnet/Me...gridHeader.asp
    infatti, si capisce come, renderizzando diversamente l'header del DG e con l'aiuto dell'HtmlTextWriter, si puo' fare cio' che si vuole.

    Ho paura però che questa soluzione mi faccia pervenire troppe domande dalla squadra e dai futuri membri....Dovrebbe essere una roba piu' di uso comune.
    Prima di adottarla, quindi, voglio provare ad usare (due prove):

    1) Un repeater con un HeaderTemplate
    2) Nell'ItemDataBound calcolare la somma in Unit.Pixel e costruirmi una tabella lato server con le stesse misure, in testa alla testata del DG

    Se non mi convince il risultato, seguiro' poi anche il consiglio di padre Pietro da Arbatax, sempre saggio ed efficace.........

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    il metodo di CodeProject funziona alla grande. E' abbastanza semplice da poterlo adottare.

    In pochi passi, ecco come aggiungere una Header sopra la Header ufficiale:

    Nell'ItemCreated del Datagrid:
    codice:
        Private Sub Datagrid_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles Datagrid.ItemCreated
            If e.Item.ItemType = ListItemType.Header Then
                ' Reindirizzo il metodo render di default ad un mio metodo custom
                e.Item.SetRenderMethodDelegate(AddressOf DjCiko_CustomRender)
            End If
        End Sub
    codice:
        Public Sub DjCiko_CustomRender(ByVal writer As HtmlTextWriter, ByVal ctl As Control)
            ' ...non c'e' bisogno della apertura <TR> perche' il writer la mette in automatico...       
            writer.Write("<TD bgcolor=#99CCFF colspan=4 align=center><font color=darkblue>CONTROLLI</font></TD>")
            writer.Write("<TD bgcolor=#99CCFF colspan=2 align=center><font color=darkblue>RDA</font></TD>")
            writer.Write("<TD bgcolor=#99CCFF colspan=2 align=center><font color=darkblue>ODA</font></TD>")
            writer.Write("<TD bgcolor=#99CCFF colspan=2 align=center><font color=darkblue>EFFETTIVO</font></TD>")
            writer.Write("<TD bgcolor=#99CCFF colspan=2 align=center><font color=darkblue>SOMME</font></TD>")
            writer.Write("</TR>")
            Datagrid.HeaderStyle.AddAttributesToRender(writer)
    
            ' Ricostruisco la testata originale generata dal datagrid
            writer.RenderBeginTag("TR")
            Dim ind As Integer = 0
            Do While ind <= ctl.Controls.Count - 1
                ctl.Controls(ind).RenderControl(writer)
                ind += 1
            Loop
            ' ...non c'e' bisogno della chiusura </TR> perche' il writer la mette in automatico...
        End Sub
    ed il risultato (nel mio caso) è una cosa come questa: (la header in blu scuro è quella ufficiale, quella in azzurrino è l'aggiunta)

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    :master: non conoscevo questa tecnica: interessante, e semplice.
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.