2015-07-20 36 views
1

是否有可能在一個模板字段中有兩個項目模板?這是我當前的代碼和它不工作,因爲當我運行它e.Row.FindControl( 「gvQuoteItems」)始終返回null:兩個項目模板在一個模板字段中?

ASPX:

<asp:TemplateField ItemStyle-Width="50px"> 
        <ItemTemplate> 
         <img alt="" style="cursor: pointer" src="images/plus.png" /> 
         <asp:Panel ID="pnlQuoteItems" runat="server" Style="display: none"> 
          <asp:GridView ID="gvQuoteItems" runat="server" AutoGenerateColumns="false" CssClass="GridView" OnRowDeleting="gvQuote_RowDeleting" ShowFooter="True"> 
           <Columns> 
            <asp:CommandField ShowDeleteButton="True" /> 
            <asp:BoundField DataField="QuoteItemID" HeaderText="QuoteItemID" SortExpression="QuoteItemID" Visible="false" /> 
            <asp:BoundField DataField="Category" HeaderText="Category" SortExpression="Category" Visible="false" /> 
            <asp:BoundField DataField="Cover" HeaderText="Cover" SortExpression="Cover" /> 
            <asp:BoundField DataField="CoverType" HeaderText="Cover Type" SortExpression="CoverType" Visible="false" /> 
            <asp:BoundField DataField="SumInsured" HeaderText="Sum Insured" SortExpression="SumInsured" /> 
            <asp:BoundField DataField="Rate" HeaderText="Rate" SortExpression="Rate" /> 
            <asp:BoundField DataField="AnnualPremium" HeaderText="Annual Premium" SortExpression="AnnualPremium" /> 
            <asp:BoundField DataField="MonthlyPremium" HeaderText="Monthly Premium" SortExpression="MonthlyPremium" /> 
           </Columns> 
           <FooterStyle BackColor="#022439" Font-Bold="True" ForeColor="White" /> 
           <EmptyDataTemplate> 
            No Data To Display! 
           </EmptyDataTemplate> 
          </asp:GridView> 
         </asp:Panel> 
        </ItemTemplate> 
        <ItemTemplate> 
         <img alt="" style="cursor: pointer" src="images/plus.png" /> 
         <asp:Panel ID="pnlMotorQuoteItems" runat="server" Style="display: none"> 
          <asp:GridView ID="gvMotorQuoteItems" runat="server" AutoGenerateColumns="false" CssClass="GridView" OnRowDeleting="gvQuote_RowDeleting" ShowFooter="True"> 
           <Columns> 
            <asp:CommandField ShowDeleteButton="True" /> 
            <asp:BoundField DataField="QuoteItemID" HeaderText="QuoteItemID" SortExpression="QuoteItemID" Visible="false" /> 
            <asp:BoundField DataField="Category" HeaderText="Category" SortExpression="Category" Visible="false" /> 
            <asp:BoundField DataField="Year" HeaderText="Year" SortExpression="Year" /> 
            <asp:BoundField DataField="MakeAndModel" HeaderText="Make And Model" SortExpression="MakeAndModel" /> 
            <asp:BoundField DataField="NCB" HeaderText="NCB" SortExpression="NCB" /> 
            <asp:BoundField DataField="Cover" HeaderText="Cover" SortExpression="Cover" /> 
            <asp:BoundField DataField="CoverType" HeaderText="Cover Type" SortExpression="CoverType" Visible="false" /> 
            <asp:BoundField DataField="SumInsured" HeaderText="Sum Insured" SortExpression="SumInsured" /> 
            <asp:BoundField DataField="Rate" HeaderText="Rate" SortExpression="Rate" /> 
            <asp:BoundField DataField="AnnualPremium" HeaderText="Annual Premium" SortExpression="AnnualPremium" /> 
            <asp:BoundField DataField="MonthlyPremium" HeaderText="Monthly Premium" SortExpression="MonthlyPremium" /> 
           </Columns> 
           <FooterStyle BackColor="#022439" Font-Bold="True" ForeColor="White" /> 
           <EmptyDataTemplate> 
            No Data To Display! 
           </EmptyDataTemplate> 
          </asp:GridView> 
         </asp:Panel> 
        </ItemTemplate> 
       </asp:TemplateField> 

代碼隱藏:

if (e.Row.RowType == DataControlRowType.DataRow) 
      { 
       int categoryID = int.Parse(gvQuote2.DataKeys[e.Row.RowIndex].Value.ToString()); 
       if (categoryID == 16) 
       { 
        GridView gvQuoteItems = e.Row.FindControl("gvMotorQuoteItems") as GridView; 
        gvQuoteItems.DataSource = _QuoteBLL._GetMotorQuoteItemsDataTable(quote.QuoteID); 
        gvQuoteItems.DataBind(); 
       } 
       else 
       { 
        GridView gvQuoteItems = e.Row.FindControl("gvQuoteItems") as GridView; 
        gvQuoteItems.DataSource = _QuoteBLL._GetQuoteItemsDataTable(quote.QuoteID, categoryID); 
        gvQuoteItems.DataBind(); 
       } 
      } 

當我試圖按照原樣運行上面的代碼時,e.Row.FindControl(「gvQuoteItems」)總是返回null。但如果我刪除第二個ItemTemplate,它工作正常。但你看,其中一行有不同的列(gvMotorQuoteItems)。我怎麼去解決這個問題?

回答

1

您不能重寫相同的模板兩次。但是,您可以在模板中有兩個placeholeholders,並通過Visible屬性僅顯示/隱藏相關的一個。

<ItemTemplate> 
    <asp:PlaceHolder ID="phFirst" runat="server"> 
    ... pnlQuoteItems 
    </asp:PlaceHolder> 
    <asp:PlaceHolder ID="phSecond" runat="server"> 
    ... pnlMotorQuoteItems 
    </asp:PlaceHolder> 
</ItemTemplate>