Как связать выпадающий список внутри ретранслятора? - PullRequest
12 голосов
/ 12 сентября 2011

Я хочу связать выпадающий список, который находится внутри кода repeatater.my

 <asp:Repeater ID="rep_UnAssignComps" runat="server">
    <ItemTemplate><asp:DropDownList ID="drp_CompPropAddress" runat="server">
            </asp:DropDownList></itemTemplate></asp:Repeater>

Ответы [ 4 ]

15 голосов
/ 12 сентября 2011

На событии вашего репитера ItemDatabound используйте следующее:

if (e.Item.ItemType == ListItemType.Item || 
         e.Item.ItemType == ListItemType.AlternatingItem)
{

    ((DropDownList)e.Item.FindControl("drp_CompPropAddress")).DataSource =(DataRowView) e.Item.DataItem;//Or any other datasource.
    ((DropDownList)e.Item.FindControl("drp_CompPropAddress")).DataBind();

}
5 голосов
/ 12 сентября 2011

Используйте событие ItemDataBound повторителя, например:

protected void rep_UnAssignComps_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    DropDownList selectList = e.Item.FindControl("drp_CompPropAddress") as DropDownList;
    if (selectList != null)
    {
        selectList.DataSource = SomeDataSource(); //your datasource
        selectList.DataBind();

        //selectList.DataTextField = "SomeColumn";
        //selectList.DataValueField = "SomeID";
    }
}

Также не забудьте установить свойства DataTextField и DataValueField в разметке или в событии ItemDataBound.

4 голосов
/ 07 ноября 2014

Я только что нашел способ сделать это декларативно:

<asp:Repeater ID="rep_UnAssignComps" runat="server">
<ItemTemplate><asp:DropDownList ID="drp_CompPropAddress" runat="server" DataSource='<%# MyList %>' SelectedValue='<%# Eval("Address") %>'>
        </asp:DropDownList></itemTemplate></asp:Repeater>

«Адрес», используемый в Eval (), является членом класса, который привязан к повторителю, выполненному с использованием кода.Источник данных, используемый в качестве MyList, в моем случае - это список, содержащий возможные значения, которые будут отображаться в раскрывающемся списке.

0 голосов
/ 03 декабря 2014

Используйте событие повторителя OnItemCreated и свяжите выпадающие внутри него.

HTML

<asp:Repeater runat="server" ID="repRoute" **OnItemCreated**="PopulateCountries">
            <ItemTemplate>
                <asp:DropDownList runat="server" ID="cboCountries" DataTextField="Name" DataValueField="CountryCode"/>&nbsp;
            </ItemTemplate>
        </asp:Repeater>

Codebehind:

protected void PopulateLocations(object sender, RepeaterItemEventArgs e)
    {
        var customerInfo = (CustomerInfo)e.Item.DataItem;
        if (customerInfo == null) return;

        var cboCountries = (DropDownList)e.Item.FindControl("cboCountries");
        cboCountries.DataSource = GetAll();
        cboCountries.DataBind();
    }
...