1

我需要创建一组DropDownLists 来显示并允许更改项目的属性组。

我的 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例如,假设我们有 和 的可能属性BC
如果 的数据库输出Repeater包含其中两个值AB,则Repeater输出两个DropDownLists,所有 3 个值都可用,第一个A值作为选定值,第二个B值作为选定值。

编辑:在我的情况下,
似乎添加并选择适当的值并不是可行的方法。这是因为我还需要将可能更改的值保存到数据库中。OnItemDataBound="repeater_ItemDataBound"Repeater

ItemDataBound事件在 a 上的事件Repeater之前触发,并在保存新选择之前将所选值更改为其旧值。OnClickButton

关于如何解决这个问题的任何建议?

当前代码:

<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使用 Bryan Parker 建议的方法来选择正确的值。

4

2 回答 2

4

也许我误解了你的问题......但这似乎正是 OnItemDataBound 的用途。:)

使用 FindControl 在事件处理程序中获取对 DropDownList 的引用。还要检查以确保该项目不是页眉/页脚。来自 MSDN 的示例做了以下两件事:

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

于 2009-02-17T10:45:44.117 回答
1

关于我在编辑中指定的问题,时间DataBind起着重要作用。我曾经在Page_Init事件中进行数据绑定,这导致事件在事件repeater_ItemDataBound之前被触发button_OnClick

解决方案是将数据绑定移至Page_PreRender事件。
拥有所有选择的人口DropDownList仍然在其OnInit事件中完成。

于 2009-02-24T08:07:51.427 回答