views:

187

answers:

1

Hi,

I'm trying to display all orders placed and I have a primary accessdatasource control that has a select query to get the customer information and the orderID. I want to use the orderID value from this first query as a parameter for the secondary accessdatasource control that selects the product information of the products in the order. In plain english, I want to:- select product info from product table where orderID = ? (where ? is the orderID value from the first query)

I have tried the <%#Eval("OrderID")%> but I get a "server tag not well formed" error, but I do get results returned when I just type the order ID in, but obviously every result (order) just contains the same product info...

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

Inside of the Repeater ItemTemplate, you can create a HiddenField control and set its Value to <%#Eval("OrderID")%>. Then add a control parameter for this hidden field to the Select Parameter collection of 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>

Also, I think the error that you were getting may be because you used double quotes twice. Try single quotes around the server tags for the Eval statement, like I have above.

Antony Highsky