Utilizzando Telerik RadComboBox all'interno di un ripetitore
-
18-09-2019 - |
Domanda
Ho un ripetitore che contiene un Telerik RadComboBox:
<asp:Repeater ID="rpt" runat="server">
<ItemTemplate>
<telerik:RadComboBox ID="rcb" runat="server" EnableLoadOnDemand="true"
AllowCustomText="true" ItemRequestTimeout="1000"
NumberOfItems="10" MarkFirstMatch="false">
</telerik:RadComboBox>
</ItemTemplate>
</asp:Repeater>
In caso ItemDataBound del ripetitore, sto Cablaggio caso ItemsRequested in questo modo:
private void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e) {
RadComboBox rcb = (RadComboBox)e.Item.FindControl("rcb");
rcb.ItemsRequested += rcb_ItemsRequested;
}
private void rcb_ItemsRequested(object o, RadComboBoxItemsRequestedEventArgs e) {
// Database call to load items occurs here.
// As configured, this method is never called.
}
Al momento, il metodo lato server rcb_ItemsRequested non viene mai chiamato. Ho il sospetto che il cablaggio l'evento ItemsRequested nel ItemDataBound è problematico, ma il problema potrebbe risiedere altrove.
Tutte le idee su come utilizzare il Telerik RadComboBox all'interno di un ripetitore correttamente?
Soluzione
Hai provato a mettere il cablaggio gestore di eventi nel codice piuttosto che aggiungere in modo dinamico?
Inoltre - si sono probabilmente consapevoli, ma solo nel caso in cui - ItemsRequested è un evento che solo gli incendi in determinate condizioni. Per citare i documenti:
The ItemsRequested event occurs when the EnabledLoadOnDemand property is True and the user types text into the input field or clicks on the drop-down toggle image when the list is empty.
- Riferimento
Il tuo scenario corrisponde al sopra?
Modifica :
Ho provato un po 'di codice. I seguenti lavori (L'ItemsRequested evento si attiva per le tutte le ComboBoxes e aggiunge i tre elementi di prova per la discesa al volo ..):
Markup:
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:Repeater ID="rpt" runat="server" OnItemDataBound="rpt_ItemDataBound">
<ItemTemplate>
<br />
<telerik:RadComboBox ID="rcb" runat="server" EnableLoadOnDemand="true" AllowCustomText="true"
ItemRequestTimeout="1000" NumberOfItems="10" MarkFirstMatch="false" />
</ItemTemplate>
</asp:Repeater>
</form>
codice dietro:
protected void Page_Load(object sender, EventArgs e)
{
List<string> data = new List<string>();
data.Add("Item 1");
data.Add("Item 2");
//add some items to the repeater to force it to bind and repeat..
rpt.DataSource = data;
rpt.DataBind();
}
protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
//wire the event
RadComboBox rcb = (RadComboBox)e.Item.FindControl("rcb");
rcb.ItemsRequested += rcb_ItemsRequested;
}
protected void rcb_ItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)
{
//add the items when requested.
(sender as RadComboBox).Items.Add(new RadComboBoxItem("Item1", "1"));
(sender as RadComboBox).Items.Add(new RadComboBoxItem("Item2", "2"));
(sender as RadComboBox).Items.Add(new RadComboBoxItem("Item3", "3"));
}