C# 如何跨<;链接GridView控件;asp:内容>;占位符?

C# 如何跨<;链接GridView控件;asp:内容>;占位符?,c#,asp.net,gridview,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>

我正在学习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放在CPHLEFSIDE内容占位符中,GridView GRDORDERDERDETERS放在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>
<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>

命令
>
在右侧,我有orderDetails内容,代码如下:

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

订单详情

首先想到的解决方案是使用代码隐藏。在
Page.Init
中,尝试:

grdOrders.DataSource = sdsOrderDetails
同样,您很可能必须枚举select参数集合并显式关联控件


更新:您甚至可以尝试匹配
控件的ID属性,Visual Studio可能会抱怨,但很有可能它们不会作为命名容器。当您的Order gridview被选中时(无论事件名为--onSelected或其他什么),在代码隐藏中执行此操作:

  • sdsOrderDetails.parameters(“orderID”).defaultvalue=grdOrders.selectedvalue
这只是psuedo,但希望足够清晰。

试试这段代码

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

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