Загрузить RadComboBoxItemData [] из веб-API в asp.net - PullRequest
0 голосов
/ 31 марта 2020

Как загрузить RadComboBoxItemData [] из Web APi в aspx?

В веб-API:

public RadComboBoxItemData[] ABC(object context)
       {

List<RadComboBoxItemData> result = null;
           ...
           return result.ToArray();
       }

1 Ответ

0 голосов
/ 14 апреля 2020

Ниже приведен код, который я использовал с большим успехом.

<telerik:RadComboBox runat="server" ID="comboSearch"
        Width="350" Height="300" 
        EnableLoadOnDemand="true" ShowMoreResultsBox="true"
        EnableVirtualScrolling="true"
        EmptyMessage="Search Names..."
        ItemsPerRequest="100">
        <WebServiceSettings Method="GetNames"
            Path="../../webservices/NamesWS.asmx">
        </WebServiceSettings>
    </telerik:RadComboBox>

Ниже приведен пользовательский веб-сервис, который я написал для нашего варианта использования.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Script.Services;
using System.Web.Services;
using Telerik.Web.UI;

namespace Webservices
{
    [ScriptService]
    public class NamesWS : WebService
    {
        [WebMethod]
        public RadComboBoxData GetNames(RadComboBoxContext context)
        {
              RadComboBoxData comboBoxData = null;

            if (!string.IsNullOrEmpty(context.Text) && !string.IsNullOrWhiteSpace(context.Text))
            {
                using (DbConn db = new DbConn())
                {                    
                    int max_ret_count = 100;

                    List<Users> Users = db.Users
                                            .Where(u => u.Users.Contains(context.Text.Trim()))
                                            .Take(max_ret_count).ToList();

                    if (Users == null)
                    {
                        comboBoxData = new RadComboBoxData();
                        List<RadComboBoxItemData> result = new List<RadComboBoxItemData>(1);
                        RadComboBoxItemData item = new RadComboBoxItemData();
                        item.Text = "";
                        item.Value = "";
                        result.Add(item);
                        comboBoxData.Items = result.ToArray();
                    }
                    else
                    {
                        List<RadComboBoxItemData> result = new List<RadComboBoxItemData>(context.NumberOfItems);
                        comboBoxData = new RadComboBoxData();

                        try
                        {
                            int itemsPerRequest = Convert.ToInt32(max_ret_count);
                            int itemOffSet = context.NumberOfItems;
                            int endOffSet = itemOffSet + itemsPerRequest;
                            if (endOffSet > Users.Count)
                            {
                                endOffSet = Users.Count;
                            }
                            if (endOffSet == Users.Count)
                            {
                                comboBoxData.EndOfItems = true;
                            }
                            else
                            {
                                comboBoxData.EndOfItems = false;
                            }

                            result = new List<RadComboBoxItemData>(endOffSet - itemOffSet);
                            for (int i = itemOffSet; i < endOffSet; i++)
                            {
                                RadComboBoxItemData itemData = new RadComboBoxItemData();
                                itemData.Text = Users[i].UserName;
                                itemData.Value = Users[i].UserID;

                                result.Add(itemData);
                            }

                            if (Users.Count > 0)
                            {
                                comboBoxData.Message = String.Format("Items <b>1</b>-<b>{0}</b> out of <b>{1}</b>"
                                                                    , endOffSet.ToString()
                                                                    , Users.Count.ToString());
                            }
                            else
                            {
                                comboBoxData.Message = "No matches";
                            }

                            comboBoxData.Items = result.ToArray();
                        }
                        catch (Exception ex)
                        {
                            ins_error_log err = new ins_error_log();
                            err.runSP(ex, false);
                        }
                    }
                }
            }
            else
            {
                comboBoxData = new RadComboBoxData();
                List<RadComboBoxItemData> result = new List<RadComboBoxItemData>(1);
                RadComboBoxItemData item = new RadComboBoxItemData();
                item.Text = "";
                item.Value = "";
                result.Add(item);
                comboBoxData.Items = result.ToArray();
            }

            return comboBoxData;
        }
    }
}
...