Formview Dropdown 2 зависит от Dropdown 1

У меня есть вид формы, в шаблоне редактирования у меня есть два раскрывающихся списка. Выпадающий 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>

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


person Solmead    schedule 22.08.2008    source источник
comment
Вы решили проблему, иначе я предложу вам другое элегантное решение?   -  person Muhammad Akhtar    schedule 14.12.2009


Ответы (3)


У меня была аналогичная проблема с привязанными раскрывающимися списками в 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;
person craigmoliver    schedule 08.10.2008

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

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

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

person Joel Meador    schedule 22.08.2008

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

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

person Mark Brackett    schedule 25.08.2008