如何在 <asp:Content> 占位符之间链接 GridView 控件?

4

我正在学习ASP.NET,有一个主从场景,在ASP.NET 3.5和C#中使用两个GridView。GridView grdOrders 列出了一组订单,GridView grdOrderDetails列出了一个订单的详细信息。我有一个主页面,其中定义了两个内容区域,代码如下:

<div class="leftColumn">
    <asp:ContentPlaceHolder id="cphLeftSide" runat="server" />
</div>
<div class="rightColumn">
    <asp:ContentPlaceHolder ID="cphRightSide" runat="server" />
</div>

在我的orders.aspx内容页面中,我已经将grdOrders GridView放置在cphLeftSide内容占位符中,将GridView grdOrderDetails放置在cphRightSide占位符中,代码如下:

<asp:Content ID="leftContent" ContentPlaceHolderID="cphLeftSide" runat="server">
    <h2>Orders</h2>
    <asp:GridView ID="grdOrders" DataSourceID="sdsOrders"...></asp:GridView>
<asp:SqlDataSource ID="sdsOrders" runat="server" ConnectionString="<%$ ConnectionStrings:csOrders %>" 
    SelectCommand="usp_GetOrders" SelectCommandType="StoredProcedure">></asp:SqlDataSource>
</asp:Content>

在右侧,我有类似以下代码的orderDetails内容:

<asp:Content ID="rightContent" ContentPlaceHolderID="cphRightSide" runat="server">
    <h2>Order details</h2>
    <asp:GridView ID="grdOrderDetails" DataSourceID="sdsOrderDetails"...></asp:GridView>
<asp:SqlDataSource ID="sdsOrderDetails  runat="server" 
    ConnectionString="<%$ ConnectionStrings:csOrders %>" 
    SelectCommand="usp_GetOrderDetails" SelectCommandType="StoredProcedure">
    <SelectParameters>
        <asp:ControlParameter Name="orderId" ControlID="grdOrders" PropertyName="SelectedDataKey.Value" />
    </SelectParameters>
</asp:Content>

当我运行代码时,出现以下错误:
服务器在“/Test2”应用程序中发生错误。 在ControlParameter 'orderId'中找不到控件'grdOrders'。 描述: 在当前Web请求的执行过程中发生未处理的异常。 请查看堆栈跟踪以获取有关该错误的更多信息以及 它在代码中的起源。 异常详细信息: System.InvalidOperationException: Could not find control 'grdOrders' in ControlParameter 'orderId'。
如何连接这两个数据源? 这样当我选择一个订单时,它就会运行usp_GetOrderDetails存储过程并绑定到grdOrderDetails GridView? 如果我将两个GridView和DataSources放在同一个位置,则代码可以正常运行。
<asp:Content> 

标签。
3个回答

2

当您选择订单网格视图时(无论事件称为onSelected还是其他名称),请在您的代码后台执行以下操作:

  • sdsOrderDetails.parameters("orderID").defaultvalue = grdOrders.selectedvalue

这只是伪代码,但希望足够清晰易懂。


1

尝试这段代码

<SelectParameters>
    <asp:ControlParameter Name="orderId" ControlID="cphLeftSide$grdOrders" PropertyName="SelectedDataKey.Value" />
</SelectParameters>

这是因为您的问题在于 refer 参数找不到 "grdorders",所以您可以使用 $ 来使参数查找同一页面上的其他内容占位符。


0

首先想到的解决方案是在代码后台完成。在Page.Init中尝试:

grdOrders.DataSource = sdsOrderDetails

同样地,您很可能需要枚举选择参数集并显式关联控件。
更新:您甚至可以尝试省略控件的ID属性,Visual Studio可能会抱怨,但它们不会作为命名容器而行事的可能性很大。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接