2015-07-20 3 views
1

Возможно ли иметь два шаблона элементов в одном поле шаблона? Это мой текущий код и он не работает, потому что, когда я запускаю его e.Row.FindControl ("gvQuoteItems") всегда возвращает нуль:Два шаблона элементов в одном поле шаблона?

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> 

Code-за:

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> 
Смежные вопросы