Question

I'm facing the problem while using the RadComboBox. I've used the example from Telerik Demo to populate RadComboBox with data on demant in a new empty project. And when the control calls for the WCF service for data the RadComboBoxContext parameter is empty. Can you please advice me what I'm doing wrong?

Help is very appreciated!

Here's sample of code I used: ASPX:

    <telerik:RadComboBox runat="server" ID="RadComboBox1" Height="100px" 
        EnableLoadOnDemand="true" ShowMoreResultsBox="true" EnableVirtualScrolling="true"
        EmptyMessage="Type here ...">
        <WebServiceSettings Path="~/ComboBoxWcfService.svc" Method="LoadData" />
    </telerik:RadComboBox>
</div>

WCF Service:

    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "ComboBoxWcfService" in code, svc and config file together.

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ComboBoxWcfService {
    public void DoWork()
    {
    }
    [OperationContract]
    public RadComboBoxData LoadData(RadComboBoxContext context)
    {
        //The RadComboBoxData object contains all required information for load on demand:
        // - the items 
        // - are there more items in case of paging
        // - status message to be displayed (which is optional)

        AdventureWorksDataContext northwind = new AdventureWorksDataContext();



        RadComboBoxData result = new RadComboBoxData();

        //Get all items from the Customers table. This query will not be executed untill the ToArray method is called.
        var allCustomers = from customer in northwind.Customers
                           orderby customer.ContactName
                           select new RadComboBoxItemData
                           {
                               Text = customer.ContactName
                           };


        //In case the user typed something - filter the result set
        string text = context.Text;
        if (!String.IsNullOrEmpty(text))
        {
            allCustomers = allCustomers.Where(item => item.Text.StartsWith(text));
        }
        //Perform the paging
        // - first skip the amount of items already populated
        // - take the next 10 items
        int numberOfItems = context.NumberOfItems;
        var customers = allCustomers.Skip(numberOfItems).Take(10);

        //This will execute the database query and return the data as an array of RadComboBoxItemData objects
        result.Items = customers.ToArray();


        int endOffset = numberOfItems + customers.Count();
        int totalCount = allCustomers.Count();

        //Check if all items are populated (this is the last page)
        if (endOffset == totalCount)
            result.EndOfItems = true;

        //Initialize the status message
        result.Message = String.Format("Items <b>1</b>-<b>{0}</b> out of <b>{1}</b>",
                                       endOffset, totalCount);

        return result;
    }
}

WebConfig:

      <service behaviorConfiguration="metadataAndDebug" name="WebApplication1.ComboBoxWcfService">
    <endpoint address="" behaviorConfiguration="WebBehavior" binding="webHttpBinding"
      contract="WebApplication1.ComboBoxWcfService" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>
Was it helpful?

Solution

I found where the trick was. I needed to use Ajax-Enabled WCF service. So I should have used AjaxBehavior instead of WebBehavior:

    <behavior name="AjaxBehavior">
      <enableWebScript />
    </behavior>
    <behavior name="WebBehavior">
      <webHttp />
    </behavior>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top