如何将primary accessdatasource控件中的值用作辅助accessdatasource控件的select查询中的参数

时间:2010-05-06 15:10:29

标签: asp.net sql vb.net ms-access repeater

我正在尝试显示所有下达的订单,并且我有一个主要的accessdatasource控件,它有一个select查询来获取客户信息和orderID。我想使用第一个查询中的orderID值作为辅助accessdatasource控件的参数,该控件选择订单中产品的产品信息。用简单的英语,我想: - 从产品表中选择产品信息,其中orderID =? (其中?是第一个查询的orderID值)

我已经尝试了<%#Eval(“OrderID”)%>但我得到一个“服务器标签形成不良”的错误,但是当我输入订单ID时,我确实得到了结果,但显然每个结果(订单)只包含相同的产品信息......

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

1 个答案:

答案 0 :(得分:0)

在Repeater ItemTemplate中,您可以创建一个HiddenField控件并将其值设置为&lt;%#Eval(“OrderID”)%&gt;。然后将此隐藏字段的控制参数添加到AccessDataSource2的Select Parameter集合。


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

此外,我认为您获得的错误可能是因为您使用了两次双引号。尝试Eval语句的服务器标签周围的单引号,就像我上面一样。