2013-09-27 14 views
0

我有經典的「EditItemTemplate中‘/’無法找到控制」的錯誤,因爲我有指控件ID內的搜索參數EditItemTemplateGridView。我嘗試過使用GridView的ID(gridview $ controlID)預先添加ControlID,但它不起作用。如果需要,我很樂意使用「代碼隱藏」方法,但我更願意理解爲什麼預計方法不起作用。基於下面的代碼的任何提示?找不到控制在ControlParameter - 前面加上ContentPlaceHolderID不工作

謝謝!

<asp:UpdatePanel ID="upMatchEntry" ChildrenAsTriggers="false" EnableViewState="false" runat="server" UpdateMode="Conditional"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="ddlGameWeek" EventName="SelectedIndexChanged" /> 
    </Triggers> 
    <ContentTemplate> 
     <asp:GridView ID="gvMatchSelect" DataKeyNames="MatchID,HomeTeamID,AwayTeamID" 
      DataSourceID="sdsMatches" runat="server" AutoGenerateEditButton="True" 
      AutoGenerateColumns="False" EmptyDataText="No Matches Found" ContentPlaceHolderID="cpMatchSelect"> 
      <Columns> 
       <asp:TemplateField HeaderText="Home Team" SortExpression="HomeTeamName" ItemStyle-HorizontalAlign="left"> 
        <ItemTemplate><%# Eval("HomeTeamName") %></ItemTemplate> 
        <EditItemTemplate> 
         <asp:DropDownList runat="server" ID="ddlHomeTeam" DataSourceID="sdsHomeTeams" 
          DataTextField="HomeTeamName" DataValueField="HomeTeamID" 
          SelectedValue='<%# Bind("HomeTeamID") %>' AutoPostBack="True" /> 
        </EditItemTemplate> 
        <ItemStyle HorizontalAlign="Left" /> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Away Team" SortExpression="AwayTeamName" ItemStyle-HorizontalAlign="left"> 
        <ItemTemplate><%# Eval("AwayTeamName") %></ItemTemplate> 
        <EditItemTemplate> 
         <asp:DropDownList runat="server" ID="ddlAwayTeam" DataSourceID="sdsAwayTeams" 
          DataTextField="AwayTeamName" DataValueField="AwayTeamID" 
          SelectedValue='<%# Bind("AwayTeamID") %>' AutoPostBack="True"/> 
        </EditItemTemplate> 
        <ItemStyle HorizontalAlign="Left" /> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
     <asp:SqlDataSource ID="sdsMatches" ConnectionString='<%$ ConnectionStrings:ApplicationServices %>' runat="server" 
      SelectCommand="pGameWeekMatchAdminDisplay" SelectCommandType="StoredProcedure"> 
      <SelectParameters> 
       <asp:ControlParameter Name="GameWeekID" ControlID="ddlGameWeek" PropertyName="SelectedValue" Type="Int32" DefaultValue="-1" /> 
       <asp:ControlParameter Name="DivisionID" ControlID="ddlDivision" PropertyName="SelectedValue" Type="Int32" DefaultValue="-1" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 
     <asp:SqlDataSource ID="sdsHomeTeams" ConnectionString='<%$ ConnectionStrings:ApplicationServices %>' runat="server" 
      SelectCommand="SELECT 'Select Home Team' AS HomeTeamName, -1 AS HomeTeamID UNION SELECT Name AS HomeTeamName, TeamID AS HomeTeamID FROM Team WHERE DivisionID = @DivisionID AND TeamID <> @AwayTeamID" > 
      <SelectParameters> 
       <asp:ControlParameter Name="DivisionID" ControlID="ddlDivision" PropertyName="SelectedValue" Type="Int32" /> 
       <asp:ControlParameter Name="AwayTeamID" ControlID="gvMatchSelect$ddlAwayTeam" PropertyName="SelectedValue" Type="Int32" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 
     <asp:SqlDataSource ID="sdsAwayTeams" ConnectionString='<%$ ConnectionStrings:ApplicationServices %>' runat="server" 
      SelectCommand="SELECT 'Select Away Team' AS AwayTeamName, -1 AS AwayTeamID UNION SELECT Name AS AwayTeamName, TeamID AS AwayTeamID FROM Team WHERE DivisionID = @DivisionID AND TeamID <> @HomeTeamID" > 
      <SelectParameters> 
       <asp:ControlParameter Name="DivisionID" ControlID="ddlDivision" PropertyName="SelectedValue" Type="Int32" /> 
       <asp:ControlParameter Name="HomeTeamID" ControlID="gvMatchSelect$ddlHomeTeam" PropertyName="SelectedValue" Type="Int32" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 
    </ContentTemplate> 
</asp:UpdatePanel> 
+0

在SqlDataSource應該如何知道哪個' ddlHomeTeam'它應該從它的參數? – Khan

+0

我不確定我是否理解你的問題。這就是我所要求的。 – LeeCambl

+0

可以有多個'ddlHomeTeam'實例,因爲它存在於'GridView'中。SqlDataSource不知道你正在引用哪個實例。您可能需要重新考慮您的設計,或者在您的'GridView'中包含SDS。 – Khan

回答

0

的控件嵌套在GridViewRow它實現了INamingContainer接口的內部。如果您使用的是最新版本的ASP.NET,只需要單行編輯,你應該能夠通過使控制ID靜以解決此問題:

ClientIDMode="Static" 
+0

我現在可能會聽起來很迂腐,但我實際上並沒有要求替代解決方案,我問爲什麼在其他人中工作的「GridViewID $ ControlID」方法在上面不起作用。有什麼想法嗎?除此之外,使用'ClientIDMode =「Static」'也不起作用。 – LeeCambl

相關問題