我试图在中继器中填充一个下拉列表,但我不是很成功。
我可能用错了事件。
这是我的ASPX代码:

        <asp:Repeater runat="server" id="criteriaScore">
            <HeaderTemplate>
              <ul>
                <li class="header"><span class="item">Kriterie</span><span class="value">Poeng</span><span class="description">Beskrivelse</span></li>
            </HeaderTemplate>
            <ItemTemplate>
                <li>
                    <span class="item"> <%# Eval("criteria") %>:</span>
                    <asp:DropDownList id="ddlRating" runat="server" autopostback="true" enableviewstate="false"></asp:DropDownList>
                    <span class="value score<%# Eval("lvl") %>" title="<%# Eval("description") %>"> </span>
                </li>
            </ItemTemplate>
            <FooterTemplate>
                </ul>
            </FooterTemplate>
        </asp:Repeater>

以及背后的密码:
    protected void criteriaScore_ItemDataBound(object sender, DataListCommandEventArgs e)
    {
        DropDownList ddl = (DropDownList)e.Item.FindControl("ddlRating");

        for(int i=1; i > 5; i++)
        {
            ddl.Items.Add(new ListItem(i.ToString(), i.ToString()));
        }
    }

有人能指引我走正确的路吗?:)

最佳答案

对于这个问题的其他答案,itemdatabound事件不应用于绑定控件数据,请在控件级别执行此操作。
在下拉列表中定义数据绑定事件:

<asp:DropDownList runat="server" ID="ddlYourDDL"  OnDataBinding="ddlYourDDL_DataBinding">

然后实现OnDataBinding事件:
protected void ddlYourDDL_DataBinding(object sender, System.EventArgs e)
{
    DropDownList ddl = (DropDownList)(sender);
    for (int i = 1; i < 5; i++)
    {
         ddl.Items.Add(new ListItem(i.ToString(), i.ToString()));
    }

    // Now that the items are all there, set the selected property
    ddl.SelectedValue = Eval("selectedfieldname").ToString();
 }

您应该尝试在控制级别执行所有数据绑定,而不是搜索内容,让网格知道其中包含的内容。每个控件都可以自行处理;)这样就更容易向模板添加和删除控件,并将这些更改隔离开来。

09-30 19:13