2014-09-12 46 views
1

好吧,我知道這個問題已經被問了一百萬次。我搜索了幾天,沒有發現任何在線解決方案實際上適用於我。這裏是我的代碼:在ControlParameter'參數名'中找不到控制'ControlID'

<asp:SqlDataSource 
       ID="SqlDataSource2" 
       runat="server" 
       ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
       ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 
       SelectCommand="SELECT VTPNAME, NETWORKKEY, FKVTPDOMAIN, VLANNUMBER, NETDESCRIPTION, BEGINNINGIP, 
            HOSTS, DEFAULTGATEWAY FROM NETWORK.NETWORK, NETWORK.VTPDOMAIN WHERE 
            NETWORK.FKVTPDOMAIN = VTPDOMAIN.VTPDOMAINKEY" 
       DeleteCommand="DELETE FROM NETWORK.NETWORK WHERE NETWORKKEY =: NETWORKKEY" 
       UpdateCommand="UPDATE NETWORK.NETWORK SET FKVTPDOMAIN =:updateFKVTP, VLANNUMBER = :VLANNUMBER, 
           NETDESCRIPTION = :NETDESCRIPTION,BEGINNINGIP = :BEGINNINGIP, 
           HOSTS = :HOSTS,DEFAULTGATEWAY = :DEFAULTGATEWAY WHERE NETWORKKEY = :NETWORKKEY" 
       InsertCommand="INSERT INTO NETWORK.NETWORK (VLANNUMBER,NETDESCRIPTION,BEGINNINGIP,HOSTS,DEFAULTGATEWAY,FKVTPDOMAIN) VALUES (:vlanNet,:descNet,:begIpNet,:hostNet,:defNet,:vtpdomainkey)"> 
       <InsertParameters> 
        <asp:ControlParameter Name="vlanNet" ControlID="vlanTextbox" /> 
        <asp:ControlParameter Name="descNet" ControlID="descTextbox" /> 
        <asp:ControlParameter Name="begIpNet" ControlID="beginIPTextbox" /> 
        <asp:ControlParameter Name="hostNet" ControlID="hostsTextbox" /> 
        <asp:ControlParameter Name="defNet" ControlID="defaultGatTextBox" /> 
        <asp:ControlParameter Name="vtpdomainkey" ControlID="vtpDomainFKDropDown" /> 
       </InsertParameters> 
       <UpdateParameters> 
        <asp:ControlParameter Name="updateFKVTP" ControlID="vtpNameDropDownUpdate" /> 
       </UpdateParameters> 
      </asp:SqlDataSource> 

      <asp:GridView 
       ID="GridView2" 
       runat="server" 
       AutoGenerateColumns="False" 
       DataSourceID="SqlDataSource2" 
       AllowPaging="True" 
       AllowSorting="True" 
       DataKeyNames="NETWORKKEY" 
       Width="650px" 
       OnRowUpdating="GridView2_RowUpdating"> 
       <Columns> 
        <asp:CommandField HeaderText="Options" ShowDeleteButton="True" ShowEditButton="True" /> 
        <asp:TemplateField HeaderText="VTP Domain" SortExpression="VTPNAME"> 
         <EditItemTemplate> 
          <asp:DropDownList ID="vtpNameDropDownUpdate" runat="server" DataSourceID="SqlDataSource6" DataTextField="VTPNAME" DataValueField="VTPDOMAINKEY"> 
          </asp:DropDownList> 
         </EditItemTemplate> 
         <ItemTemplate> 
          <asp:Label ID="Label2" runat="server" Text='<%# Bind("VTPNAME") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 

這裏給出實際的錯誤:

Could not find control 'vtpNameDropDownUpdate' in ControlParameter 'updateFKVTP'. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: Could not find control 'vtpNameDropDownUpdate' in ControlParameter 'updateFKVTP'. 

一切正常應該是,除了下拉列表。它不會找到它,我已經試過美元符號,冒號,下劃線,你的名字,告訴它控制在哪裏,沒有結果。他們是相同的,他們都在另一個之下,就像我在這裏發佈的一樣。我得到了第一行實際更新,因爲我嘗試了在運行時右鍵單擊下拉列表的方法,並且「檢查元素」並將整個ControlID字符串複製並粘貼到ControlParameter ControlID中。問題是,有幾行,所以它只適用於我檢查過的一個元素,而不是所有其他元素。任何幫助將不勝感激,並提前感謝您的時間!

-Fernando

+0

你從頁面複製的字符串是怎麼樣的?我懷疑我們可以從中派生出一些通用的東西 – Andrei 2014-09-12 16:13:09

+0

在ControlParameter'updateFKVTP'中找不到控件'vtpNameDropDownUpdate'。 描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。 異常詳細信息:System.InvalidOperationException:在ControlParameter'updateFKVTP'中找不到控件'vtpNameDropDownUpdate'。 – 2014-09-12 16:52:58

回答

0

DropDownList控件是模板控制裏面,所以你應該找到模板控制first.In這個示例模板控制在GridView的第7列。找到模板裏面,你可以找到DropDownList:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     var index = e.RowIndex; 
var dropDownctr= GridView1.Rows[index].Controls[6].FindControl("vtpNameDropDownUpdate")  

    } 
+0

好吧,所以我試了一下,它似乎正在返回正確的路徑,但是,我不完全確定我應該怎麼做它,因爲你提供給我的這個代碼是在aspx.cs方面,如何我可以在HTML代碼的aspx中使用它嗎? – 2014-09-12 17:34:21

+0

可能在GridView1_RowUpdating方法上的代碼behinde上工作:var index = e.RowIndex; var dropDownctr = GridView1.Rows [index] .Controls [6] .FindControl(「vtpNameDropDownUpdate」)SqlDataSource1.UpdateParameters.Add(「updateFKVTP」,dropDownctr.SelectedItem);或者你可以在 – 2014-09-12 17:53:06

+0

後面的代碼上進行更新。你真棒,先生,非常感謝。這對我有用: var index = e.RowIndex; var dropDownctr = GridView2.Rows [index] .Controls [6] .FindControl(「vtpNameDropDownUpdate」); SqlDataSource2.UpdateParameters.Add(「updateFKVTP」,dropDownctr.ClientID); – 2014-09-12 18:36:12