Frage

Ich habe einen Repeater, der eine Telerik RadComboBox enthält:

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

Im ItemDataBound Ereignisse des Repeaters, ich bin die Verdrahtung der ItemsRequested Veranstaltung wie diese auf:

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

Derzeit ist die serverseitige rcb_ItemsRequested Methode nie aufgerufen. Ich vermute, dass das Ereignis ItemsRequested Verdrahtung in der ItemDataBound problematisch ist, aber das Problem kann woanders liegen.

Alle Ideen, wie die Telerik RadComboBox innerhalb eines Repeaters richtig nutzen?

War es hilfreich?

Lösung

Haben Sie versucht, die Event-Handler Verdrahtung im Markup setzen, anstatt sie dynamisch hinzufügen?

Auch - Sie sind wohl bewusst, aber nur für den Fall - ItemsRequested ist ein Ereignis, dass nur Brände unter bestimmten Bedingungen. Um die Dokumente zu zitieren:

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

Gibt es in Ihrem Szenario der oben Vorstellungen?

Bearbeiten :

Ich habe einige Code getestet. Die folgenden Werke (The ItemsRequested Ereignis feuert für alle Comboboxen und fügt die drei Prüflingen auf die Drop-down-on-the-fly ..):

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

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"));
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top