2010-11-05 5 views
0

Hey, j'essaie de rendre mon DataGrid imprimable. Pour ce faire, j'essaie de cacher les 4 dernières colonnes. J'ai un bouton imprimable que je voudrais quand on clique, faire disparaître ces 4 dernières colonnes. J'ai jusqu'ici échoué à faire ce travail.Cacher les colonnes d'une grille de données (asp.net/c#)

J'ai essayé:

ProductsGrid.Columns[6].ControlStyle.Width = -1; 

et

ProductsGrid.Columns[6].Visible = false; 

Note: ces colonnes ont des données en eux. Cela fait peut-être partie de mon problème. Aussi, j'ai besoin que les en-têtes des colonnes disparaissent.

Merci pour tous les conseils.

EDIT: Je les rends invisibles dans ma commande de clic de bouton. Je n'utilise pas de colonnes générées, donc je pense que ce paramètre est défini sur false. J'ai eu un peu marre de ce problème et j'ai quitté le travail, et je ne serai pas de retour avant la mi-semaine prochaine, donc je pourrais avoir à attendre pour trouver la solution jusque-là. Merci pour les commentaires tout le monde, je vais y jeter un coup d'oeil bientôt. Désolé, je ne peux pas donner plus de commentaires en temps opportun.

Édition x2: Ai-je besoin de le gérer dans une sorte de publication ou autre?

+0

ProductsGrid.Columns [6] .Visible = false; devrait fonctionner. Je ne suis pas sûr à 100%, mais je pense que vous devez appeler à nouveau DataBind() pour le mettre à jour. Si vous ne reliez pas les données, les contrôles ne sont pas mis à jour sur la page. (Je définis ceci comme un commentaire plutôt qu'une réponse au lieu d'une réponse parce que je ne suis pas sûr à 100%, et pas sur mon PC de développement pour le tester.) – David

+1

Où et quand cachez-vous vos colonnes? Les rendre invisibles devrait fonctionner (sans reconsolidation). Êtes-vous autogénération des colonnes? –

+0

Si cela échoue, il ne devrait pas être trop difficile de produire une deuxième page pour l'impression en copiant et collant le code, puis supprimez les colonnes de la page d'impression dans le balisage, et liez-le avec une "Version imprimable" lien. Ou vous pouvez définir l'en-tête et les cellules de la table à une classe css appelée "noprint" et avoir un css pour l'affichage et un pour l'impression, paramètre visible à faux dans le second css ... – David

Répondre

2

Si vous avez AutoGenerateColumns = "True", cela ne fonctionne pas pour les rendre invisibles en définissant simplement visible = False, car automatically generated bound column fields are not added to the Columns collection.

VB.Net, mais je pense que vous avez l'idée:

Private Sub setPrinterView() 
    For Each tr As TableRow In DirectCast(Me.GridView1.Controls(0), Table).Rows 
     For i As Int32 = 1 To 4 
      If tr.Cells.Count - i < 0 Then Exit For 
      tr.Cells(tr.Cells.Count - i).Visible = False 
     Next 
    Next 
End Sub 

Si AutoGenerateColumns est définie sur False il vous suffit de rendre les colonnes invisibles sans reconsolidation la grille.

Questions connexes