Question

J'ai un répéteur qui contient 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>

Dans le cas ItemDataBound du répéteur, je câblage l'événement ItemsRequested comme ceci:

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

Actuellement, la méthode rcb_ItemsRequested côté serveur est jamais appelé. Je soupçonne que le câblage de l'événement ItemsRequested dans le ItemDataBound est problématique, mais le problème peut se situer ailleurs.

Toutes les idées sur la façon d'utiliser le Telerik RadComboBox dans un répéteur correctement?

Était-ce utile?

La solution

Avez-vous essayé de mettre le câblage du gestionnaire d'événements dans le balisage plutôt que d'ajouter dynamiquement?

En outre - vous le savez probablement, mais juste au cas où - ItemsRequested est un événement qui ne se déclenche que dans certaines conditions. Pour citer les documents:

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. - Référence

Votre scénario correspond ci-dessus?

EDIT :

Je l'ai testé un code. Les travaux suivants (L'événement ItemsRequested feux pour les tous ComboBoxes et ajoute les trois éléments de test pour le menu déroulant à la volée ..):

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>

code sous-jacent:

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"));
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top