2010-05-06 13 views
1

J'essaie d'afficher toutes les commandes passées et j'ai un contrôle accessdatasource principal qui a une requête select pour obtenir l'information client et le orderID. Je souhaite utiliser la valeur orderID de cette première requête en tant que paramètre pour le contrôle accessdatasource secondaire qui sélectionne les informations produit des produits dans la commande. En anglais, je veux: - sélectionner des informations sur les produits de la table des produits où orderID =? (où? Est la valeur orderID de la première requête)Comment utiliser la valeur du contrôle accessdatasource principal comme paramètre dans la requête select pour le contrôle accessdatasource secondaire

J'ai essayé le <% # Eval ("OrderID")%>, mais une erreur "étiquette de serveur n'est pas bien formée", mais j'obtiens des résultats retourné quand je viens de taper le numéro de commande, mais évidemment chaque résultat (commande) ne contient que les mêmes informations produit ...

<asp:Repeater ID="Repeater1" runat="server" 
      DataSourceID="AccessDataSource1"> 
      <ItemTemplate> 
      <asp:AccessDataSource ID="AccessDataSource2" runat="server" DataFile="~/App_Data/project.mdb" SelectCommand="SELECT orderDetails.OrderID, album.Artist, album.Album, album.Cost, album.ImageURL, orderDetails.Quantity, orderDetails.Total FROM (album INNER JOIN orderDetails ON album.AlbumID = orderDetails.AlbumID) WHERE (orderDetails.OrderID = ?)"> 
      <SelectParameters> 
// Error is on this line 
       <asp:Parameter Name="OrderID" DefaultValue="<%#Eval ("OrderID")%>" /> 
      </SelectParameters> 
      </asp:AccessDataSource> 
      <div class="viewAllOrdersOrderArea"> 
      <div class="viewAllOrdersOrderSummary"> 
       <p><b>Order ID: </b><%#Eval("OrderID")%></p> 
       <h4>Shipping Details</h4> 
       <p><b>Shipping Address: </b><%#Eval("ShippingName")%>, <%#Eval("ShippingAddress")%>, <%#Eval("ShippingTown")%>, <%#Eval("ShippingPostcode")%></p> 
       <h4>Payment Details</h4> 
       <p><b>Cardholder's Address: </b><%#Eval("CardHolder")%>, <%#Eval("BillingAddress")%>, <%#Eval("BillingTown")%>, <%#Eval("BillingPostcode")%></p> 
       <p><b>Payment Method: </b><%#Eval("CardType")%></p> 
       <p><b>Card Number: </b><%#Eval("CardNumber")%></p> 
       <p><b>Start Date: </b><%#Eval("StartDate")%>, Expiry Date: <%#Eval("ExpiryDate")%></p> 
       <p><b>Security Digits: </b><%#Eval("SecurityDigits")%></p> 
       <h4>Ordered items:</h4> 
       <asp:Repeater ID="Repeater2" runat="server" 
       DataSourceID="AccessDataSource2"> 
        <ItemTemplate> 
        <div style="display: block; float: left;"> 
        <div class="viewAllOrdersProductImage"> 
       <img width="70px" height="70px" alt="<%# Eval("Artist") %> - <%# Eval("Album") %>" src="assets/images/thumbs/<%# Eval("ImageURL") %>" /> 
      </div> 
        <div style="display:block; float:left; padding-top:15px; padding-right:20px;"><p><b><%# Eval("Artist") %> - <%# Eval("Album") %></b></p> 
        <p>£<%# Eval("Cost") %> x <%# Eval("Quantity") %> = £<%#Eval("Total")%></p></div> 
        </div> 
        </ItemTemplate> 
       </asp:Repeater> 
      </div> 

    </div> 
    </ItemTemplate> 
     </asp:Repeater> 

Répondre

0

a l'intérieur du répéteur ItemTemplate, vous pouvez créer un contrôle HiddenField et définir sa valeur à <% # Eval ("OrderID")% >. Ajoutez ensuite un paramètre de contrôle pour ce champ masqué à la collection Select Parameter d'AccessDataSource2.


<asp:HiddenField ID="HiddenField1" runat="server" Value='<%#Eval("OrderID") %>' /> 
<asp:AccessDataSource ID="AccessDataSource2" runat="server"> 
    <SelectParameters> 
     <asp:ControlParameter ControlID="HiddenField1" PropertyName="Value" Type="Int32" /> 
    </SelectParameters> 
</asp:AccessDataSource> 

Aussi, je pense que l'erreur que vous étiez peut-être parce que vous avez utilisé des guillemets doubles deux fois. Essayez des guillemets simples autour des balises du serveur pour l'instruction Eval, comme je l'ai indiqué ci-dessus.