2013-09-24 6 views
0

J'essaie d'utiliser un panneau de mise à jour dans un InsertItemTemplate d'un formulaire. Lorsque "Autre" est sélectionné dans une DropDownlist, une autre liste déroulante est masquée. Lorsque je supprime le panneau de mise à jour cela fonctionne très bien, l'enregistrement est créé sans problème. Cependant lorsque DropDownList est dans un UpdatePanel, j'obtiens l'erreur suivante lors de l'insertion:Erreur lors de la liaison de données à SQLDataSource dans un panneau de mise à jour

Oracle.DataAccess.Client.OracleException: ORA-01008: toutes les variables ne sont pas liées.

Je n'ai pas inclus tous les ASP.NET et le code derrière, s'il vous plaît demander si vous souhaitez voir autre chose, il y a plus de champs liés et beaucoup de validation de données. Voici une partie de l'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> 

Voici une partie du code derrière:

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 

La chose étrange est que cela fonctionne parfaitement si je retire le UpdatePanel. Je n'arrive pas à comprendre pourquoi la liaison dans le panneau de mise à jour ne semble pas fonctionner. J'ai formulé les recherches google chaque fois que je peux penser et je ne peux pas trouver quelqu'un avec un problème similaire, toute aide serait grandement appréciée, merci.

MISE À JOUR Voici le SqlDataSource pour le formview:

<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

Où est votre SqlDataSource par rapport au balisage affiché? – jadarnel27

+0

En bas de la page .aspx. – user2607172

+0

Vous devriez le mettre dans le UpdatePanel avec votre FormView. – jadarnel27

Répondre

0

J'ai finalement eu ce travail. Après quelques recherches, j'ai découvert qu'il s'agissait d'un bug connu lors de l'imbrication d'un UpdatePanel dans un EditItemTemplate ou un InsertItemTemplate d'un Formview. Il y a deux façons de contourner ce problème, j'ai utilisé un ControlParameter pour lier le DropDownList dans le SqlDataSource:

<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> 

Utilisez ControlParameters pour tous les contrôles à l'intérieur du UpdatePanel.

Une autre solution consiste à lier les données sur l'insertion/mise à jour dans le code sous-jacent:

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. 

Voici les liens vers les ressources que j'ai utilisé:

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

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

Questions connexes