首页 > 解决方案 > Web 窗体 GridView 在 IE 以外的浏览器中无法正确显示

问题描述

我正在尝试更新一个摇摇晃晃的旧 ASP.NET Web 窗体应用程序以在现代浏览器上工作(我们的商店多年来只在 IE 中支持它)。

在我遇到的其他问题中,我无法让 GridViews 在应用程序的几个部分中正确显示。特别是,列标题的宽度设置不正确,扭曲了整个网格。

在 IE 中,网格如下所示:

网格视图 IE

而在 Chrome、Firefox 等中,我得到了这个:

网格视图铬

请注意扭曲的帐户编号标题大小,以及数据输入单元格如何与列标题的其余部分不对齐(帐户标题、财政年度...)

我认为这是某种简单的 CSS 问题,但我所做的任何更改都没有在现代浏览器中产生任何影响——即使我尝试在 DOM 浏览器中内联编辑样式,它们也不会响应。

奇怪的是,列标题在 .aspx 中被赋予了 ItemStyle-Width 和 ItemStyle-CssClass 属性,但据我所知,这些似乎根本没有反映在生成的 HTML 标记中。

我确实看到这些单元格在 IE 的标记中而不是在现代浏览器中给出了“colSpan='1'”和“rowSpan='1'”属性,所以似乎 IE 正在以不同的方式解释 .NET 发送它的内容(说的很明显,我猜)。不过,我不知道这些属性的确切含义,因为我从未见过它们用驼色外壳写成那样。我也找不到/不明白这些属性在代码中的来源......也许这只是控件呈现方式中的某种东西。

这是图中整个 gridview 的 .aspx。请让我知道是否还有其他帮助。

     <div id="dvByFund" style= "width: 100%;">
     <asp:GridView 
        runat="server" 
        id="grdCashReceiptsByFund" 
        AutoGenerateColumns="False" 
        Width="100%"
        RowStyle-CssClass="GridListItem"
        AlternatingRowStyle-CssClass="GridListItemAlt"
        HeaderStyle-CssClass="GridListItemAlt"
        OnRowDataBound="grdCashReceiptsByFund_RowDataBound"
        ShowFooter="True"
        CellPadding="2"
        >

        <Columns>

            <asp:TemplateField ItemStyle-CssClass="invisible" HeaderStyle-CssClass="invisible" FooterStyle-CssClass="invisible">
                <ItemTemplate>
                    <asp:label runat="server" id="lblGovernmentalLevel" />
                    <asp:label runat="server" id="lblGovernmentalLevelDescription" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Account #" ItemStyle-Width="50px" ItemStyle-CssClass="AmountCell">
                <ItemTemplate>
                    <asp:TextBox runat="server" id="txtFundNumber" Width="35px" CssClass="Normal" onblur="verifyFundExists(this);" MaxLength="3" onchange="formChanged=true;" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Account Title" ItemStyle-Width="230px" ItemStyle-CssClass="AmountCell">
                <ItemTemplate>
                    <asp:Label runat="server" id="lblFundDescription" Width="210px" CssClass="ReadonlyLabelNoBorder" />
                    <asp:TextBox runat="server" id="txtFundDescription" CssClass="invisible" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Major<br /> Source" ItemStyle-Width="50px" ItemStyle-CssClass="AmountCell">
                <ItemTemplate>
                    <asp:TextBox runat="server" id="txtMajorSource" Width="35px" CssClass="Normal" MaxLength="2" onchange="formChanged=true;" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Source" ItemStyle-Width="50px" ItemStyle-CssClass="AmountCell">
                <ItemTemplate>
                    <asp:TextBox runat="server" id="txtSource" Width="35px" CssClass="Normal" MaxLength="2" onchange="formChanged=true;" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Type" ItemStyle-Width="100px" FooterStyle-HorizontalAlign="Right" ItemStyle-CssClass="AmountCell">
                <ItemTemplate>
                   <asp:DropDownList id="ddlAppropriationType" CssClass="Normal" runat="server" DataValueField="key" DataTextField="value" onchange="formChanged=true;" />
                </ItemTemplate>
                <FooterTemplate>
                    Totals:
                </FooterTemplate>
            </asp:TemplateField>            

            <asp:TemplateField ItemStyle-HorizontalAlign="Right" ItemStyle-Width="90px" FooterStyle-HorizontalAlign="Right" FooterStyle-Font-Bold="true" ItemStyle-CssClass="AmountCell">
                <ItemTemplate>
                    <asp:TextBox runat="server" id="txtFirstSessionYear" total="dvFundFirstSessionYearTotal" onchange="amountChanged(this);" onkeypress="FormatForAmount(11, '0', this);" onfocus="subtractFromTotal(this);amountFocused(this);" Width="90px" CssClass="NormalAmountNoBorder" onblur="amountBlurred(this);"  />
                </ItemTemplate>
                <FooterTemplate>
                    <div id="dvFundFirstSessionYearTotal" />
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField ItemStyle-HorizontalAlign="Right" ItemStyle-Width="90px" FooterStyle-HorizontalAlign="Right" FooterStyle-Font-Bold="true" ItemStyle-CssClass="AmountCell">
                <ItemTemplate>
                    <asp:TextBox runat="server" id="txtSecondSessionYear" total="dvFundSecondSessionYear" onchange="amountChanged(this);" onkeypress="FormatForAmount(11, '0', this);" onfocus="subtractFromTotal(this);amountFocused(this);" Width="90px" CssClass="NormalAmountNoBorder" onblur="amountBlurred(this);" />
                </ItemTemplate>
                <FooterTemplate>
                    <div id="dvFundSecondSessionYear" />
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField ItemStyle-HorizontalAlign="Right" ItemStyle-Width="90px" FooterStyle-HorizontalAlign="Right" FooterStyle-Font-Bold="true" ItemStyle-CssClass="AmountCell">
                <ItemTemplate>
                    <asp:TextBox runat="server" id="txtThirdSessionYear" total="dvFundThirdSessionYear" onchange="amountChanged(this);" onkeypress="FormatForAmount(11, '0', this);" onfocus="subtractFromTotal(this);amountFocused(this);" Width="90px" CssClass="NormalAmountNoBorder" onblur="amountBlurred(this);" />
                </ItemTemplate>
                <FooterTemplate>
                    <div id="dvFundThirdSessionYear" />
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField ItemStyle-HorizontalAlign="Right" ItemStyle-Width="90px" FooterStyle-HorizontalAlign="Right" FooterStyle-Font-Bold="true" ItemStyle-CssClass="AmountCell">
                <ItemTemplate>
                    <asp:TextBox runat="server" id="txtFourthSessionYear" total="dvFundFourthSessionYear" onchange="amountChanged(this);" onkeypress="FormatForAmount(11, '0', this);" onfocus="subtractFromTotal(this);amountFocused(this);" Width="90px" CssClass="NormalAmountNoBorder" onblur="amountBlurred(this);" />
                </ItemTemplate>
                <FooterTemplate>
                    <div id="dvFundFourthSessionYear" />
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField ItemStyle-HorizontalAlign="Right" ItemStyle-Width="90px" FooterStyle-HorizontalAlign="Right" FooterStyle-Font-Bold="true" ItemStyle-CssClass="AmountCell">
                <ItemTemplate>
                    <asp:TextBox runat="server" id="txtFifthSessionYear" total="dvFundFifthSessionYear" onchange="amountChanged(this);" onkeypress="FormatForAmount(11, '0', this);" onfocus="subtractFromTotal(this);amountFocused(this);" Width="90px" CssClass="NormalAmountNoBorder" onblur="amountBlurred(this);" />
                </ItemTemplate>
                <FooterTemplate>
                    <div id="dvFundFifthSessionYear" />
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField ItemStyle-HorizontalAlign="Right" ItemStyle-Width="90px" FooterStyle-HorizontalAlign="Right" FooterStyle-Font-Bold="true" ItemStyle-CssClass="AmountCell">
                <ItemTemplate>
                    <asp:TextBox runat="server" id="txtSixthSessionYear" total="dvFundSixthSessionYear" onchange="amountChanged(this);" onkeypress="FormatForAmount(11, '0', this);" onfocus="subtractFromTotal(this);amountFocused(this);" Width="90px" CssClass="NormalAmountNoBorder" onblur="amountBlurred(this);" />
                </ItemTemplate>
                <FooterTemplate>
                    <div id="dvFundSixthSessionYear" />
                </FooterTemplate>
            </asp:TemplateField>
        </Columns>
     </asp:GridView>

     <asp:Button id="btnAddByFundRow" runat="server" Text="Add Row" OnClientClick="addByFundRow(); return false;" class="CommandButton" />
     </div>

应用于 AmountCell 类的 CSS:

.AmountCell
    {
        border: solid 1px silver;
    }

当我从所有 TemplateFields 中删除 ItemStyle-Width 和 ItemSytle-CssClass 属性时,出现了一个奇怪的错误:

错误

基本上,预期的结果:这个 gridview 在浏览器中看起来是一样的(在 IE 中出现的方式,列与其标题正确对齐)。

实际结果:IE 看起来不错,Chrome/Firefox 看起来失真。

我不是 Web 表单如何工作的最重要的专家(从长远来看),因此非常感谢任何帮助。谢谢!

更新:在使用开发工具一段时间后,我了解到生成的 .html 标记包含 GridView 的每个行元素的内联样式:

style="display:block;"

从 tr 元素中消除这种内联样式会将行的列重新调整为正确的对齐方式。

问题是,我仍然不知道如何在代码中摆脱它......它似乎不是明确添加的东西,而只是融入了 asp.net 控件。

再次,非常感谢任何和所有的见解!

标签: asp.netgridviewwebformscross-browser

解决方案


推荐阅读