begin process at 2012 02 05 01:22:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

ASP.Net

 > FIGER UN ENTÊTE DE GRIDVIEW AVEC DÉBORDEMENT HORIZONTAL

FIGER UN ENTÊTE DE GRIDVIEW AVEC DÉBORDEMENT HORIZONTAL


 Description

Il existe plusieurs solutions à base de div (qui figent la première ligne du gridview) mais elle a une contrainte de taille : si le gridview dépasse la taille de la div, l'entête déborde systèmatiquement et la barre horizontale n'entraine que le corps du gridview (illisible, donc).
L'idée, c'est de traiter l'entête dans une table séparée, suivie du gridview, le tout encapsulé dans une div (qui gèrera la barre horizontale).
Dans mon cas, j'ai encapsulé tout celà dans un panel (d'affichage).
J'appelle cette sub dans l'évenement prérender des gridview.
Seul bémol, je n'optiens pas systèmatiquement un alignement des colonnes (si quelqu'un à une idée, d'ailleurs, je suis preneur ...).
Bon code à tous!


Source

  • Protected Sub FreezeGridviewHeader(ByRef GV As GridView, ByRef TableGV As Table, ByRef PanelGV As Panel)
  • ' ATTENTION : penser à placer le EnableViewState (directement dans la page html) à False du gridview sur lequel vous
  • 'appliquez cette sub pour éviter undécalage entre le sélect et la ligne sélectionnée
  • TableGV.Rows.Add(GV.HeaderRow)
  • TableGV.Rows(0).ControlStyle.CopyFrom(GV.HeaderStyle)
  • TableGV.CellSpacing = 3
  • TableGV.CellPadding = 5
  • TableGV.Rows(0).Cells(0).Text = "Items : " & NbrItemsAttenteLB.Text
  • TableGV.Rows(0).Cells(0).Width = Unit.Pixel(70)
  • TableGV.Rows(0).Cells(0).BorderStyle = BorderStyle.Inset
  • TableGV.Rows(0).Cells(0).BorderWidth = Unit.Pixel(1)
  • Dim count As Integer = 1
  • Dim tailleTableau As Integer = 0
  • Dim NbrCellVisibles As Integer = 0
  • For count = 1 To GV.HeaderRow.Cells.Count - 1
  • If GV.Columns(count).Visible = "False" Then
  • TableGV.Rows(0).Cells(count).Visible = "False"
  • Else
  • NbrCellVisibles = NbrCellVisibles + 1
  • TableGV.Rows(0).Cells(count).Width = GV.Columns(count).ItemStyle.Width
  • TableGV.Rows(0).Cells(count).BorderStyle = BorderStyle.Inset
  • TableGV.Rows(0).Cells(count).BorderWidth = Unit.Pixel(1)
  • tailleTableau = tailleTableau + Convert.ToInt32(TableGV.Rows(0).Cells(count).Width.Value) + Convert.ToInt32(TableGV.Rows(0).Cells(count).BorderWidth.Value)
  • End If
  • Next
  • TableGV.Width = Unit.Pixel(tailleTableau + (TableGV.CellPadding + TableGV.CellSpacing) * NbrCellVisibles * 2)
  • End Sub
Protected Sub FreezeGridviewHeader(ByRef GV As GridView, ByRef TableGV As Table, ByRef PanelGV As Panel)

        ' ATTENTION : penser à placer le EnableViewState (directement dans la page html) à False du gridview sur lequel vous 
        'appliquez cette sub pour éviter undécalage entre le sélect et la ligne sélectionnée

        TableGV.Rows.Add(GV.HeaderRow)
        
        TableGV.Rows(0).ControlStyle.CopyFrom(GV.HeaderStyle)

        TableGV.CellSpacing = 3
        TableGV.CellPadding = 5

        TableGV.Rows(0).Cells(0).Text = "Items : " & NbrItemsAttenteLB.Text
        TableGV.Rows(0).Cells(0).Width = Unit.Pixel(70)
        TableGV.Rows(0).Cells(0).BorderStyle = BorderStyle.Inset
        TableGV.Rows(0).Cells(0).BorderWidth = Unit.Pixel(1)


        Dim count As Integer = 1

        Dim tailleTableau As Integer = 0
        Dim NbrCellVisibles As Integer = 0
        For count = 1 To GV.HeaderRow.Cells.Count - 1
            If GV.Columns(count).Visible = "False" Then
                TableGV.Rows(0).Cells(count).Visible = "False"
            Else
                NbrCellVisibles = NbrCellVisibles + 1
                TableGV.Rows(0).Cells(count).Width = GV.Columns(count).ItemStyle.Width
                TableGV.Rows(0).Cells(count).BorderStyle = BorderStyle.Inset
                TableGV.Rows(0).Cells(count).BorderWidth = Unit.Pixel(1)
                tailleTableau = tailleTableau + Convert.ToInt32(TableGV.Rows(0).Cells(count).Width.Value) + Convert.ToInt32(TableGV.Rows(0).Cells(count).BorderWidth.Value)

            End If
        Next
        TableGV.Width = Unit.Pixel(tailleTableau + (TableGV.CellPadding + TableGV.CellSpacing) * NbrCellVisibles * 2)

    End Sub



 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) GUESTBOOK AVEC GRIDVIEW par DanMor498
Source avec Zip CHECKED DROPDOWNLIST par fredzool
Source avec Zip Source avec une capture Source .NET (Dotnet) GRIDVIEW WITH TREEVIEW AND CALLBACK par fredzool
Source avec Zip APPELLER UN WEBSERVICE DEPUIS JAVASCRIPT par fredzool
Source avec Zip Source .NET (Dotnet) MONEY TEXTBOX WITH EMBEDED JAVASCRIPT par fredzool

Commentaires et avis

Commentaire de spyz91 le 22/10/2009 16:10:22

Pour aligner les colonnes, peut tre récupérer le paramètre "width" de la colonnes pour l'appliquer au même paramètre dans l'en-tête figé.

header1.width = colonne1.width ?

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales