2010-11-01 6 views
0

Ma page semble correcte dans Firefox et IE8. Mais dans IE7, un gridview imbriqué déborde dans la cellule adjacente, un peu comme le numéro here. Dans les outils de développement, il y a un style en ligne associé à la table qu'ASP.NET a généré, et il a un attribut width de 100%. Si je supprime cela, la table imbriquée revient à l'endroit où elle appartient.Le code généré par GridView ajoute "width = '100%'" à la table qu'il crée

Le problème est, nulle part est un ensemble de style en ligne. En fait, si j'essaie de définir width='250px', il est remplacé par width='100%'. Si j'essaie de supprimer l'attribut width dans le code-behind, attrGridView.Attributes["Width"] est null, et l'appel .Remove() ne fait rien. Mais chaque table gridview-table générée par asp.net a un style en ligne avec width='100%' dessus (cela ne me cause que des problèmes en un seul endroit).

La définition table-layout='fixed', comme suggéré dans l'article auquel je suis lié, n'a pas aidé.

Comment puis-je obtenir ASP.NET pour arrêter la définition de cette propriété?


Certains code:

<asp:TemplateField HeaderText="Attributes" SortExpression="Attributes"> 
    <HeaderStyle CssClass="GridHeaderCell" /> 
    <ItemStyle CssClass="GridTableCell AttrGridCellPadding" /> 
    <ItemTemplate> 

    <asp:GridView id="attributesGridView" runat="server" 
     AutoGenerateColumns="false" ShowHeader="false" GridLines="None" 
     AlternatingRowStyle-BackColor="White" CssClass="StupidGridView" > 

     <EmptyDataTemplate> 
     <p class="italic">There are no attributes for this request.</p> 
     </EmptyDataTemplate> 

     <Columns> 
     <asp:TemplateField> 
      <ItemStyle CssClass="AttrTableCell" /> 
      <ItemTemplate> 
      <asp:Label id="attributeName" runat="server" 
       Text='<%# Eval("Name") + ":&nbsp;&nbsp; "+ Eval("Value") %>' 
       CssClass="AttrGridCell"></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     </Columns> 

    </asp:GridView> 
    </ItemTemplate> 
</asp:TemplateField> 


.StupidGridView { 
    width: 250px; 
} 
+0

Avez-vous un thème spécifié quelque part? Si un thème est appliqué à la grille, il est possible qu'il écrase les paramètres au niveau du contrôle. – lincolnk

+0

lincolnk, vous l'avez cloué! Je n'utilise pas de thèmes gridview, mais quelqu'un d'autre dans le projet est. Je peux remplacer cela sur mes gridviews, pas de problème. Si vous postez comme réponse, je le marquerai comme correct. Merci! –

Répondre

2

Les thèmes sont appliqués et remplacent les paramètres du niveau de contrôle. Vérifiez les paramètres de thème sur la page, web.config ou n'importe où ailleurs un thème peut être défini.

1

Malheureusement, le rendu html ASP.NET est vraiment mauvais. Microsoft le sait et a fourni Control adapters en 2006 qui vous permettent de modifier le rendu des contrôles. Au lieu de chercher comment surcharger ce qu'ASP.NET rend, je conseillerais d'utiliser CSSFriendly qui fournit des adaptateurs de contrôle pour la plupart des contrôles rendus ASP.NET défectueux.

Si vous n'avez pas besoin de "rendu css pur" et que CSS vous a peur, vous pouvez vérifier comment ils font pour créer votre propre adaptateur.

ScottGu post on this subject de google.

+0

Renvoyé pour la suggestion de l'adaptateur de contrôle et lien vers l'article de Scott Gu. Je vais certainement regarder plus dans ceci! –