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

时间:2010-07-23 07:45:14

标签: c# asp.net gridview

我正在学习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放在cphLeightSide内容占位符和cphRightSide占位符中的GridView grdOrderDetails中,代码如下:

<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:无法在ControlParameter'orderId'中找到控件'grdOrders'。

如何连接两个数据源?因此,当我选择一个订单时,它运行usp_GetOrderDetails存储过程并绑定到grdOrderDetails GridView?如果我将GridViews和DataSources放在同一个

中,代码运行正常
<asp:Content> 

标签

3 个答案:

答案 0 :(得分:2)

当您选择Order gridview时(无论事件被调用 - onSelected或其他什么),请在代码隐藏中执行此操作:

  • sdsOrderDetails.parameters(“orderID”)。defaultvalue = grdOrders.selectedvalue

这只是伪装,但希望足够清楚。

答案 1 :(得分:1)

试试此代码

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

那是因为你的问题是在参数参数中找不到“grdorders”所以你可以使用$来使参数在同一页面上的其他内容占位符中查找

答案 2 :(得分:0)