Как связать элементы управления GridView череззаполнители? - PullRequest
4 голосов
/ 23 июля 2010

Я изучаю ASP.NET, и у меня есть сценарий мастер-детализации с использованием двух GridViews в ASP.NET 3.5 и C #. 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'. Не удалось найти элемент управления 'grdOrders' в ControlParameter 'orderId'. Описание: необработанное исключение произошло во время выполнение текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для более информация об ошибке и где это произошло в коде. Сведения об исключении: System.InvalidOperationException: Не удалось найти элемент управления grdOrders в ControlParameter 'orderId'.

Как мне соединить два источника данных? Чтобы при выборе заказа он запускал хранимую процедуру usp_GetOrderDetails и связывался с grdOrderDetails GridView? Код работает нормально, если я поместил и GridViews, и DataSources в один

<asp:Content> 

бирка.

Ответы [ 3 ]

2 голосов
/ 02 августа 2010

Когда выбрано ваше сеточное представление Order (независимо от того, вызывается ли событие - onSelected или что-то еще), сделайте это в своем коде:

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

Это просто псевдо, но, надеюсь, достаточно ясно.

1 голос
/ 12 декабря 2011

Попробуйте этот код

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

Это потому, что ваша проблема в параметре refer, не можете найти "grdorders", поэтому вы можете использовать $, чтобы параметр выглядел в другом заполнителе содержимого на той же странице

0 голосов
/ 23 июля 2010

Первое решение, которое приходит на ум, это сделать это в коде.В пределах Page.Init попробуйте:

grdOrders.DataSource = sdsOrderDetails

Аналогичным образом вам, скорее всего, придется перечислить выбранную коллекцию параметров и явно связать элемент управления.

Обновление: Выможет даже попытаться пропустить атрибут ID элементов управления <asp:content>, Visual Studio может пожаловаться, но есть хороший шанс, что они не будут вести себя как контейнеры для именования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...