Сведения о вопросе

Junior

19:56, 23rd August, 2020

Теги

asp.net   formview    

Этот выпадающего 2, зависит от выпадающих 1

Просмотров: 427   Ответов: 3

У меня есть вид формы, в шаблоне редактирования у меня есть два раскрывающихся списка. Выпадающий список 1 явно задается со списком разрешенных значений. Он также установлен на autopostback. Выпадающий список 2 привязан к объекту objectdatasource, этот объект objectdatasource использует первый выпадающий список в качестве одного из своих параметров. (Идея заключается в том, что выпадающий 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>

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



  Сведения об ответе

ITSME

09:38, 22nd August, 2020

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

(не знаю, откуда вы получаете 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;


  Сведения об ответе

PROGA

17:39, 13th August, 2020

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

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


  Сведения об ответе

ITSME

11:32, 28th August, 2020

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться