Форма просмотра Dropdown 2 зависит от Dropdown 1 - PullRequest
4 голосов
/ 22 августа 2008

У меня есть вид формы, в шаблоне редактирования у меня есть два раскрывающихся списка. Выпадающий 1 явно установлен со списком допустимых значений. Он также установлен на автоответчик. Раскрывающийся список 2 привязан к источнику данных объекта, этот объектный источник данных использует первый раскрывающийся список в качестве одного из своих параметров. (Идея состоит в том, что выпадающий 1 ограничивает то, что показано в выпадающем списке 2)

При первом просмотре шаблона редактирования элемента он работает нормально. Но если в раскрывающемся списке 1 выбран другой элемент, он отправляет сообщение назад и выдает ошибку

Методы привязки данных, такие как Eval (), XPath () и Bind () могут использоваться только в контексте элемента управления с привязкой к данным.

Вот выпадающий список № 2:

<asp:DropDownList ID="ProjectList" runat="server" SelectedValue='<%# Bind("ConnectToProject_ID","{0:D}") %>' DataSourceID="MasterProjectsDataSource2" DataTextField="Name" DataValueField="ID" AppendDataBoundItems="true">
      <asp:ListItem Value="0" Text="{No Master Project}" Selected="True" />
</asp:DropDownList>

А вот MasterProjectDataSource2:

<asp:ObjectDataSource ID="MasterProjectsDataSource2" runat="server" 
            SelectMethod="GetMasterProjectList" TypeName="WebWorxData.Project" >
            <SelectParameters>
                <asp:ControlParameter ControlID="RPMTypeList" Name="RPMType_ID" 
                    PropertyName="SelectedValue" Type="Int32" />
            </SelectParameters>
        </asp:ObjectDataSource>

Любая помощь в том, как заставить это работать, будет очень ценной.

Ответы [ 3 ]

3 голосов
/ 08 октября 2008

У меня была похожая проблема со связанными выпадающими списками в FormView. Я обошел его, установив выбранное значение вручную в OnDataBound формы.

(не знаю, откуда вы получаете ConnectToProject_ID)

FormView fv = (FormView)sender;
DropDownList ddl = (DropDownList)fv.FindControl("ProjectList");
ddl.SelectedValue = String.Format("{0:D}", ConnectToProject_ID);

Когда вы готовы сохранить, используйте событие «OnItemInserting»:

FormView fv = (FormView)sender;
DropDownList ddl = (DropDownList)fv.FindControl("ProjectList");
e.Values["ConnectToProject_ID"] = ddl.SelectedValue;

или "OnItemUpdating"

Когда вы будете готовы сохранить, используйте событие "OnItemInserting":

FormView fv = (FormView)sender;
DropDownList ddl = (DropDownList)fv.FindControl("ProjectList");
e.NewValues["ConnectToProject_ID"] = ddl.SelectedValue;
0 голосов
/ 25 августа 2008

Если ваш второй выпадающий список не находится в элементе управления с привязкой к данным (скажем, Repeater) - я не уверен, к чему вы пытаетесь привязать SelectedValue. По-видимому, ни один из .NET - поскольку, вероятно, там, где происходит ошибка.

Откуда должен появиться Connect_ToProjectId?

0 голосов
/ 22 августа 2008

Похоже, что элементы управления не привязаны к данным после обратной передачи.

Связываете ли вы первое раскрывающееся меню на странице или в коде? Если есть код, вы делаете это каждый раз в on_init или on_load?

Возможно, проблема с SelectedValue второго выпадающего меню, установленного на несуществующий элемент после обратной передачи.

...