2013-09-24 34 views
0

我正嘗試使用Formview的InsertItemTemplate中的更新面板。當從一個DropDownlist中選擇「其他」時,另一個下拉列表將被隱藏。當我刪除更新面板這工作正常,記錄創建沒有問題。但是,當DropDownList在UpdatePanel中時,我在插入時出現以下錯誤:將數據綁定到更新面板中的SQLDataSource時出錯

Oracle.DataAccess.Client.OracleException:ORA-01008:並非所有變量都被綁定。

我沒有包括所有的ASP.NET和代碼,請問你是否想看其他的東西,還有更多的綁定字段和大量的數據驗證。下面是ASP.NET的一部分:

<asp:Formview 

     ID="fvJobs" 
     DataSourceID="fvSqlDataSource" 
     DataKeyNames="JOB_ID" 
     DefaultMode="Edit" 
     OnItemInserting="fvJobs_FileUpl" 
     OnItemInserted="fvJobs_ItemInserted" 
     OnItemupdating="fvJobs_FileUp2" 
     OnItemUpdated="fvJobs_ItemUpdated" 
     runat="server"> 


<asp:DropDownList ID="InsertLocList" 
             SelectedValue='<%# Bind("JOB_LOCATION") %>' 
             Autopostback="true" 
             CssClass="ddl" 
             OnSelectedIndexChanged="InsertLocList_IndexChanged" 
             RunAt="Server" > 
             <asp:ListItem Text="--Select One--" Value="-1" /> 
             <asp:ListItem Text="California" Value="CA" /> 
             <asp:ListItem Text="New York" Value="NY" /> 
             <asp:ListItem Text="Pennsylvania" Value="PA" /> 
             <asp:ListItem Text="Texas" Value="TX" /> 
             <asp:ListItem Text="Other" Value="O" /> 
             </asp:DropDownList></label> 


        <asp:UpdatePanel ID="UpdatePanel1" 
       UpdateMode="Conditional" 
       runat="server"> 
       <Triggers> 
        <asp:AsyncPostBackTrigger ControlID="InsertLocList" /> 
       </Triggers> 
        <contentTemplate> 

        <span><asp:label id="InsertCatLbl" runat="server"><b>Subsidiary:</b></asp:label></span> 

         <asp:DropDownList ID="InsertCatList" 

             SelectedValue='<%# Bind("JOB_CATEGORY") %>' 
             CssClass="ddl" 
             RunAt="Server" > 
          <asp:ListItem Text="--Select One--" Value="-1" /> 

             <asp:ListItem Text="SRC" Value="SRC" /> 
             <asp:ListItem Text="FRN" Value="FRN" /> 
             <asp:ListItem Text="SUPDIST" Value="SUPDIST" /> 
             <asp:ListItem Text="Stream" Value="STREAM" /> 

             </asp:DropDownList> 
             </contentTemplate> 
             </asp:UpdatePanel> 

下面是一些背後的代碼:

Protected Sub InsertLocList_IndexChanged(sender As Object, e As EventArgs) 



Dim ddlLoc As DropDownList = _ 
     CType(fvJobs.FindControl("InsertLocList"), DropDownList) 

Dim ddlCat As DropDownList = _ 
     CType(fvJobs.FindControl("InsertCatList"), DropDownList) 

     Dim catLbl As Label = _ 
     CType(fvJobs.FindControl("InsertCatlbl"), Label) 


     If ddlLoc.SelectedValue = "O" 

     ddlCat.selectedvalue="SRC" 
     ddlCat.visible=false 
     catLbl.visible=false 



    else 

    ddlCat.visible = true 
    catLbl.visible = true 

    end if 



end sub 

奇怪的是這完美的作品,如果我刪除的UpdatePanel。我無法弄清楚爲什麼更新面板中的綁定似乎沒有工作。我用我能想到的每一種方式說明了谷歌搜索,我似乎無法找到任何有類似問題的人,任何幫助將不勝感激,謝謝。

UPDATE 這裏是FormView控件在SqlDataSource:

<asp:SqlDataSource ID="fvSqlDataSource" 
      ConnectionString="<%$ ConnectionStrings:Oracle %>" 
      ProviderName="<%$ ConnectionStrings:Oracle.ProviderName %>" 
      SelectCommand="SELECT JOB_DESC, JOB_ID, JOB_CATEGORY, JOB_LOCATION, JOB_DATE_BEGIN, JOB_DATE_CLOSED, JOB_FILENAME, JOB_SHOW_INDIC from JOB_POSTING WHERE JOB_ID = :JOB_ID" 
      RunAt="server" 
      UpdateCommand="UPDATE JOB_POSTING SET JOB_DESC=:JOB_DESC, JOB_LOCATION=:JOB_LOCATION, JOB_CATEGORY=:JOB_CATEGORY, JOB_DATE_BEGIN=TO_DATE(:JOB_DATE_BEGIN, 'MM/DD/YYYY'), JOB_DATE_CLOSED=TO_DATE(:JOB_DATE_CLOSED, 'MM/DD/YYYY'), JOB_FILENAME=:JOB_FILENAME,JOB_SHOW_INDIC=:JOB_SHOW_INDIC WHERE JOB_ID=:JOB_ID" 

      InsertCommand="INSERT INTO JOB_POSTING(JOB_DESC, JOB_ID, JOB_LOCATION, JOB_CATEGORY, JOB_DATE_BEGIN, JOB_DATE_CLOSED, JOB_FILENAME, JOB_SHOW_INDIC) 
      VALUES 
     (:JOB_DESC, :JOB_ID, :JOB_LOCATION, :JOB_CATEGORY, TO_DATE(:JOB_DATE_BEGIN, 'MM/DD/YYYY'), TO_DATE(:JOB_DATE_CLOSED, 'MM/DD/YYYY'), :JOB_FILENAME, :JOB_SHOW_INDIC)" 
      > 

      <SelectParameters> 
      <asp:Parameter Name="JOB_ID" Type="String" DefaultValue="0" /> 
      </SelectParameters> 

     <UpdateParameters> 
     <asp:parameter Name="JOB_ID" Type="String" DefaultValue="0"/> 
     </UpdateParameters> 


</asp:SqlDataSource> 
+0

您的SqlDataSource與顯示的標記相關的地方在哪裏? – jadarnel27

+0

在.aspx頁面的底部。 – user2607172

+0

你應該把它放在你的FormView中的UpdatePanel裏面。 – jadarnel27

回答

0

我終於得到了這個工作。在進一步挖掘之後,我發現這是將UpdatePanel嵌套在FormView的EditItemTemplate或InsertItemTemplate中時的已知錯誤。有兩種方法來解決這個問題,我使用了一個ControlParameter在SqlDataSource的DropDownList的綁定:

<InsertParameters> 
    <asp:Parameter Name="JOB_DESC" /> 
    <asp:Parameter Name="JOB_ID" />  
    <asp:Parameter Name="JOB_FILENAME" /> 
    <asp:Parameter Name="JOB_SHOW_INDIC" /> 
    <asp:Parameter Name="JOB_LOCATION" /> 
    <asp:ControlParameter ControlID="fvJobs$InsertCatList" Name="JOB_CATEGORY" /> 
     <asp:Parameter Name="JOB_DATE_BEGIN" /> 
    <asp:Parameter Name="JOB_DATE_CLOSED" /> 
    </InsertParameters> 

的UpdatePanel內的任何控件使用ControlParameters。

另一種解決辦法是在插入/更新數據綁定在後面的代碼:

Protected Sub RoleSQLDataSource_Updating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles 
RoleSQLDataSource.Updating 

    e.Command.Parameters("@street_name").Value = street_nameTextBox.Text 
    e.Command.Parameters("@street_type").Value = street_typeTextBox.Text 
    e.Command.Parameters("@street_dir").Value = street_dirTextBox.Text 
    e.Command.Parameters("@street_number").Value = street_numberTextBox.Text 
    e.Command.Parameters("@street_apt").Value = street_aptTextBox.Text 
    e.Command.Parameters("@city").Value = cityTextBox.Text 
    e.Command.Parameters("@state").Value = stateTextBox.Text 
    e.Command.Parameters("@zip").Value = zipTextBox.Text 
    e.Command.Parameters("@district_id").Value = DistrictDropDownList.SelectedValue 
End Sub. 

下面是鏈接到我所使用的資源:

http://forums.asp.net/t/1055525.aspx

http://connect.microsoft.com/VisualStudio/feedback/details/292398/formview-and-updatepanel-binding-behavior

相關問題