10
votes

Comment débarrasser de vide vide contenant une grille

dans ASP.NET GridViews génère une table qui génère un conteneur parent div. Cela peut casser des mises en page CSS car il n'ya aucun moyen de fixer des styles à la DIV générée. Existe-t-il un moyen d'empêcher que la DIV de générer ou d'un moyen d'appliquer un style?

Ceci a été posé et marqué comme résolu ici mais MS Je viens de dire que la div est nécessaire pour la fonctionnalité de pagination et de tri. Suis-je pour comprendre que si je veux utiliser la fonctionnalité de pagination et de tri, je ne peux pas envelopper ma propre diveuve et appliquer un style? Merci


3 commentaires

"vide vide qui contient un grenades" - tee hee ;-d


haha, tu as raison, ça n'a aucun sens du tout


Moi aussi dans la même situation sans solution


8 Réponses :


0
votes

Vous pouvez le mettre à l'intérieur d'un écran ASP: panneau et définissez la propriété visible sur le panneau sur FALSE si la table est vide.


1 commentaires

Merci mais je crois que vous avez mal interprété ma question. Je n'essaie pas de cacher une grille. J'essaie de débarrasser de la Div vide qui est généré autour de la table HTML (le balisage qu'un gridview génère) en tant que conteneur parent.



-4
votes

Vous pouvez définir une classe CSSclass explicite pour votre grille de grille pour utiliser.

.nameOfStyleClass 
{
    < Style stuff >
}


2 commentaires

Le problème est que je ne veux pas utiliser une classe sur une table. Les éléments de table se comportent différemment des éléments div et sont une douleur à utiliser CSS avec. Je préfère utiliser des divs si je peux. Merci.


Cela vient de styles la grilleview, pas la DIV qui est générée automatiquement autour de lui.



-1
votes

Je n'ai jamais fait cela, mais ma première hypothèse serait que vous pourriez saisir la sortie HTML rendue juste avant de ne pas atteindre le navigateur, retirez l'extérieur DIV, puis HTMLTextwrite de votre nouveau HTML rendu dans l'événement du prélendeur ou un utilisateur ou un contrôle personnalisé pour le faire.

Mais alors vous risquez de casser la fonctionnalité de la grilleview, mais si vous savez que vous n'utilisez pas les fonctionnalités qui utilisent la DIV, vous pourriez vous en sortir.


2 commentaires

On dirait que cela fonctionnerait mais brisera probablement les fonctionnalités de tri / de pagination si je retiens la DIV. Je suppose qu'il n'y a pas de moyen intégré d'appliquer un style à la div et d'avoir une pagination et un tri. Je peux essayer d'attraper le HTML et d'ajouter une classe CSS à la DIV. Merci.


-1 Il s'agit d'une théorie non testée qui, même si elle est mise en œuvre, serait beaucoup plus lente et moins efficace que beaucoup des autres réponses ici.



2
votes

même problème ici, omg c'est si fort> ennuyeux. Glitch dans le rendu dans IE6 / 7 Lorsque vous massacrez un div au sommet d'une grille d'entretien - le parent div cause un espace entre les deux éléments.

J'ai creusé dans le code gridview à l'aide de réflecteur et trouvé le problème: P >

    Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
        Me.PrepareControlHierarchy()
        Me.RenderContents(writer)
    End Sub


0 commentaires

3
votes

Une solution facile sans rendu Modification:

J'ai besoin d'appliquer un style sur le diview généré par la grille, car il brise ma mise en page. J'ai donc créé un DIV avec ID "myContainerdiv" et déplacé ma grille en informatique et Utiliser JQuery, j'applique des styles. p>

Exemple: p> xxx pré>

i Mettez ce JavaScript en $ (document) .Ready (fonction ({})) ;. Mais si vous utilisez UpdatePanel, comme je dois utiliser dans ce cas particulier, j'exécute ce $ (). CSS () dans chaque publication ASYNC. Sans que le style sera perdu si vous exécutez un peu de marché sur lequel votre grille est contenue. Mais j'exécute ce $ (). CSS () uniquement si un Panneau de mise à jour particulier est viré (pas besoin d'exécuter cette instruction JavaScript dans tous les autres post-relevage ASYNC) P>

Exemple: P>

<script type="text/javascrcipt" src="jquery.js"></script>

<script type="text/javascript">    

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);

function EndRequestHandler(sender, args) {
    if (args.get_error() == undefined && sender._updatePanelClientIDs != null &&
            sender._updatePanelClientIDs.length > 0 && sender._updatePanelClientIDs[0] == "<%= MyParticularUpdatePanel.ClientID %>") {
            $("#myContainerDiv > div").css("display", "inline");
        }
    }

</script>

<asp:UpdatePanel runat="server" ID="MyParticularUpdatePanel" UpdateMode="Conditional"  RenderMode="Inline">
<Triggers>
// Your triggers here...
</Triggers>
<ContentTemplate>
<div id="myContainerDiv" style="display:inline;">
  <asp:GridView runat="server" ID="MyGridView" AutoGenerateColumns="false" Height="150px"   EmptyDataText="No data.">
     <Columns>
       <asp:BoundField DataField="ID" HeaderText="My ID" />
    </Columns>
  </asp:GridView>
</div>
</ContentTemplate>
</asp:UpdatePanel>


0 commentaires

9
votes

Si vous êtes coincé avec une enveloppe non colléée (qu'il apparaît que vous êtes) mais que vous voulez faire respecter un style, donnez-lui un autre wrapper em> et appliquez votre style à la combinaison. Si une plaine div a un peu de rembourrage que vous souhaitez vous débarrasser (par exemple), cela dans l'ASPX:

div#crushGvDiv, div#crushGvDiv div { padding: 0; margin: 0; }


2 commentaires

Je dirais utiliser Div # Crusygvdiv> Div (avec le>) pour le rendre plus spécifique, au cas où il y a d'autres divs enfants de #crushgvdiv, mais une bonne réponse! Je l'utilise.


Merci de m'avoir encouragé à passer en revue les points plus fins, je n'utilise pas grand chose. "Combinateur enfant" et OO, "Combinateur de soeur adjacent" aussi. CSS-Tricks.com/child-and-Sibling-Selectors



4
votes

mise à jour

La réponse des ians supprimons une grande partie du piratage de ceci, mais cela nécessite également Plus d'effort de ma part. Je pense que nous pouvons avoir le meilleur des deux mondes si nous Faites-le juste un peu différemment ...

Nous ne voulons plus ajouter de «réactif de table» à notre source du tout. Nous voulons ajouter une "table réactive de table" à nos classes de grilleview.

asp xxx

Notre JavaScript doit simplement ajouter la classe «sensible à la table» au parent DIV de ces tables de classe des «tableaux réactifs de table» que nous avons ajoutées.

< em> js xxx

ceci générera:

xxx

Cette nouvelle sortie doit être relativement exempte de problèmes liés au piratage en raison du fait que nous avons exactement la même production à la fin, comme nous leverions autrement ( À l'exception de la classe supplémentaire sur la table), nous n'avons pas besoin de modifier ce code pour chaque table (ce qui signifie que nous pouvons l'écrire une fois et qu'elle sera automatiquement appliquée à toutes les grilles avec la classe "Table-sensible"), Et nous ne déplacons pas du tout \ Copier les données de la table (cela est important pour la vitesse, la pagination et le tri). Je sais que tout le monde dit qu'ils ont la meilleure réponse, mais je pense vraiment que c'est la meilleure façon absolue de gérer cela.

Note: Je n'ai pas testé ce nouveau code mais cela fonctionnera probablement bien .


1 commentaires

J'essayais également d'ajouter une table à bottestrap, mais je l'ai fait sans le

, à la place du parent de la grilleview: $ ("# <% = mygridview.clientid %> "). Parent (). AddClass ('Table-Responsive');



0
votes

solution la plus simple et la meilleure à l'aide de la classe CSS "GridViewWrapperFix".

ASPX: P>

/* styles the div that gets auto generated around and asp.net gridview */

.gridViewWrapperFix > div { 
    padding: 0; 
    margin: 0; 
    border: 3px solid red;
}


0 commentaires