Как связать dropdownlist, который находится внутри репитера?
Я хочу связать dropdownlist, который находится внутри кода repeatater.my
<asp:Repeater ID="rep_UnAssignComps" runat="server">
<ItemTemplate><asp:DropDownList ID="drp_CompPropAddress" runat="server">
</asp:DropDownList></itemTemplate></asp:Repeater>
Ответы
Ответ 1
В событии Repeater 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();
}
Ответ 2
Используйте событие 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.
Ответ 3
Я просто нашел способ сделать это декларативно:
<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(), является членом класса, связанного с повторителем, выполненным с использованием кода позади. DataSource, используемый в качестве MyList, является списком в моем случае, который содержит возможные значения, которые будут отображаться в раскрывающемся списке.
Ответ 4
Использовать событие Repeater OnItemCreated
и связать выпадающие списки внутри него.
HTML
<asp:Repeater runat="server" ID="repRoute" **OnItemCreated**="PopulateCountries">
<ItemTemplate>
<asp:DropDownList runat="server" ID="cboCountries" DataTextField="Name" DataValueField="CountryCode"/>
</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();
}