Pregunta

Tengo un repetidor que 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>

En el caso ItemDataBound del repetidor, estoy cableando el caso ItemsRequested como esto:

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.
}

En la actualidad, el método del lado del servidor rcb_ItemsRequested nunca es llamado. Sospecho que el cableado del evento ItemsRequested en el ItemDataBound es problemático, pero el problema puede estar en otro lugar.

¿Alguna idea sobre cómo utilizar el Telerik RadComboBox dentro de un repetidor correctamente?

¿Fue útil?

Solución

¿Usted ha intentado poner el cableado de controlador de eventos en el marcado en lugar de añadir de forma dinámica?

También - usted probablemente sabe, pero por si acaso - ItemsRequested es un evento que sólo se activa bajo ciertas condiciones. Para citar los documentos:

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. - Referencia

¿Su escenario coincide con el anterior?

Editar

He probado algo de código. Las siguientes obras (El ItemsRequested evento se activa para todos los ComboBoxes y añade los tres elementos de prueba para el menú desplegable sobre la marcha ..):

Marcado:

<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>

código detrás:

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"));
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top