如何在网格ItemTemplate中隐藏/显示DIV?

时间:2017-12-07 16:55:21

标签: html asp.net grid itemtemplate

我想在程序中以可编程方式设置网格中的单个DIV,但它不起作用。你会如何修复这段代码?

            foreach (DataGridItem dgItem in dgW.Items)
            {

                HtmlGenericControl dvGoodRow =
                    (HtmlGenericControl)dgItem.FindControl("dvGoodRow");
                HtmlGenericControl dvBadRow =
                    (HtmlGenericControl)dgItem.FindControl("dvBadRow");

                dvGoodRow.Visible = true;
                dvBadRow.Visible = false;
            }

调试会话显示我上面设置的Visible属性确实至少在我的监视窗口中生效,但在浏览器上可视化我看不到任何变化。我有一个类似下面的网格:

<asp:datagrid id="dgW" AutoGenerateColumns="False" ShowHeader="False" ShowFooter="False" runat="server" DataKeyField="SID" CellPadding="0" GridLines="None" AllowSorting="True" OnItemDataBound="dgW_ItemDataBound">
    <HeaderStyle />
    <FooterStyle>
    </FooterStyle>
    <Columns>
        <asp:TemplateColumn HeaderText="SID" SortExpression="SID">
            <ItemTemplate>
                <asp:Label ID="lblSID" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "SID") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
            </FooterTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn HeaderText="Extension" SortExpression="ExtensionStopDate">
            <ItemTemplate>
                <asp:Label id="lblExtensionStopDate" Runat="server" text='<%# String.Format("{0:MM/dd/yyyy}", DataBinder.Eval(Container.DataItem, "ExtensionStopDate"))%>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
            </FooterTemplate>
        </asp:TemplateColumn>  
        <asp:TemplateColumn>
            <ItemTemplate>
                <div id="dvGoodRow" runat="server" hidden>
                    <div>
                        <asp:Label runat="server" ID="lblGoodRow">
                            <i id="icnGoodRow" runat="server"></i>
                        </asp:Label>
                    </div>
                </div>
                <div id="dvBadRow" runat="server" hidden>       
                    <div>
                        <asp:Label runat="server" ID="lblBadRow">
                            <i id="icnBadRow" runat="server"></i>
                        </asp:Label>
                    </div>                      
                </div>                        
            </ItemTemplate>
        </asp:TemplateColumn>                     
    </Columns>
</asp:datagrid>

2 个答案:

答案 0 :(得分:0)

删除该“隐藏”属性并使用visible

<div id="dvGoodRow" runat="server" visible="false">

<div id="dvBadRow" runat="server" visible="false">  

答案 1 :(得分:0)

以下是我最后修复代码的方法:我切换到显示/隐藏ASP.NET面板而不是DIV!

            <asp:TemplateColumn>
                <ItemTemplate>
                    <asp:Panel runat="server" ID="pnlGoodRow" Visible="False">
                        <div id="dvGoodRow">
                            <asp:Label runat="server" ID="lblGoodRow">
                                <i id="icnGoodRow" runat="server"></i>
                            </asp:Label>
                        </div>
                    </asp:Panel>
                    <asp:Panel runat="server" ID="pnlBadRow" Visible="False">      
                        <div id="dvBadRow">
                            <asp:Label runat="server" ID="lblBadRow">
                                <i id="icnBadRow" runat="server"></i>
                            </asp:Label>
                        </div>                      
                    </asp:Panel>                        
                </ItemTemplate>    
            </asp:TemplateColumn>                     

所以在代码中,我现在隐藏/显示Panel元素而不是DIV:

        foreach (DataGridItem dgItem in dgW.Items)
        {
            System.Web.UI.WebControls.Panel pnlGoodRow =
                (System.Web.UI.WebControls.Panel)dgItem.FindControl("pnlGoodRow");
            System.Web.UI.WebControls.Panel pnlBadRow =
                (System.Web.UI.WebControls.Panel)dgItem.FindControl("pnlBadRow");

            pnlGoodRow.Visible = true;
            pnlBadRow.Visible = false;
        }

这有效!