Ниже приведен код, который я использовал с большим успехом.
<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;
}
}
}