Как установить выбранное значение DropDownList внутри повторителя? - PullRequest
1 голос
/ 17 февраля 2009

Мне нужно создать группу из DropDownList s, чтобы показать и разрешить изменение группы свойств для элемента.

На моей странице ASP есть следующий код.

<asp:Repeater runat="server" ID="repeaterProperties">
    <ItemTemplate>
        <p><asp:DropDownList runat="server" ID="ddProperty" OnInit="ddProperty_OnInit" /><p>
    </ItemTemplate>
</asp:Repeater>

ddProperty_OnInit заполняет DropDownList всеми возможными значениями с помощью запроса к базе данных.

Как я могу установить выбранное значение каждого созданного DropDownList в соответствии с исходными данными Repeater?

Скажем, например, что у нас есть возможные значения свойств A, B и C.
Если выходные данные базы данных для Repeater содержат два из этих значений, A и B, Repeater выводит два DropDownList s, оба со всеми доступными 3 значениями и первое с A в качестве выбранного значение и второе с B в качестве выбранного значения.

Edit:
Кажется, что добавление OnItemDataBound="repeater_ItemDataBound" к Repeater и выбор подходящего значения в моем случае не подходит. Это потому, что мне также нужно сохранить возможно измененные значения в базе данных.

Событие ItemDataBound в Repeater вызывается перед событием OnClick в Button и заменяет выбранные значения на их старые значения, прежде чем новые выборы могут быть сохранены.

Любое предложение о том, как обойти это?

Текущий код:

<asp:Repeater runat="server" ID="repeaterJako" OnItemDataBound="repeater_ItemDataBound">
<ItemTemplate>
    <asp:DropDownList id="ddJako" runat="server" OnInit="ddJako_OnInit">
    </asp:DropDownList><br />
</ItemTemplate>
</asp:Repeater>
<asp:Button runat="server" id="updateButton" Text="Save" OnClick="update_OnClick" />

В выделенном фрагменте кода ddJako_OnInit заполняет раскрывающийся список всеми возможными вариантами выбора, а repeater_ItemDataBound использует метод, предложенный Брайаном Паркером, для выбора правильного значения.

Ответы [ 2 ]

4 голосов
/ 17 февраля 2009

Может быть, я что-то неправильно понимаю в вашем вопросе ... но, похоже, именно для этого предназначен OnItemDataBound. :)

Используйте FindControl, чтобы получить ссылку на свой DropDownList в обработчике событий. Также убедитесь, что элемент не является верхним / нижним колонтитулом. Пример из MSDN делает обе эти вещи:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.onitemdatabound.aspx

1 голос
/ 24 февраля 2009

В отношении проблемы, которую я указал в своем редактировании, время DataBind играет важную роль. Раньше я делал привязку данных в событии Page_Init, которое вызывало событие repeater_ItemDataBound перед событием button_OnClick.

Решением было перенести привязку данных на событие Page_PreRender.
Население DropDownList со всеми вариантами выбора все еще выполняется в его OnInit событии.

...