ASPxComboBox, фильтрующий большой набор данных с помощью XpoDataSource (DevExpress)

Я попытался отфильтровать ASPxComboBox, который получает данные с помощью XpoDataSource, обратите внимание, что восстановление и фильтрация данных из небольшого набора данных работает нормально, проблема начинается, когда я пытаюсь отфильтровать большой набор данных - около 70000 записей - из источника данных загрузка ComboBox становится очень медленной поскольку XpoDataSource получает все данные из таблицы базы данных. Поэтому я создал критерий для XpoDataSource, чтобы уменьшить количество восстановленных записей, затем ComboBox продолжает повторять 10 лучших записей при прокрутке ComboBox вниз, я не знаю, в чем проблема.

Я понял, что то, что мне нужно, похоже на пример в следующей ссылке

Но используя XpoDataSource вместо SqlDataSource1. Я не знаю, как написать аналогичный код для XpoDataSource.

это мой код:

protected void cmbServices_OnItemRequestedByValue_SQL(object source, DevExpress.Web.ASPxEditors.ListEditItemRequestedByValueEventArgs e)
    {
        try
        {
            string criteria = "";
            if (string.IsNullOrEmpty(e.Value.ToString()) || e.Value.ToString().Length < 3)
            {
                criteria = "1 = 2";
            }
            else
            {

                criteria =
                    string.Format("(( Code like '{0}%' OR ProductName like '{0}%') AND  CustomerId = {1})", e.Value.ToString(), (cmbServicesActivities != null && cmbServicesActivities.Value != null) ? cmbServicesActivities.Value.ToString() : "0");
            }
            dsServices.Session = LookupsSession;
            dsServices.Criteria = criteria;
            cmbServicesDescription.DataSource = dsServices;
            cmbServicesDescription.DataBind();
        }
        catch (Exception exc)
        {
            Debug.WriteLine(exc.Message);
        }
    }

person Mohammad Al-a'amour    schedule 22.07.2013    source источник
comment
Почему бы вам не связаться со службой поддержки DevExpress напрямую?   -  person Mikhail    schedule 22.07.2013
comment
Я думаю, что я собираюсь сделать это сейчас   -  person Mohammad Al-a'amour    schedule 23.07.2013


Ответы (1)


Следующий пример демонстрирует ответ на мой вопрос

public partial class _Default : System.Web.UI.Page {
Session session = XpoHelper.GetNewSession();

protected void cmb_ItemRequestedByValue(object source, DevExpress.Web.ASPxEditors.ListEditItemRequestedByValueEventArgs e) {
    MyObject obj = session.GetObjectByKey<MyObject>(e.Value);

    if (obj != null) {
        cmb.DataSource = new MyObject[] { obj };
        cmb.DataBindItems();
    }
}

protected void cmb_ItemsRequestedByFilterCondition(object source, DevExpress.Web.ASPxEditors.ListEditItemsRequestedByFilterConditionEventArgs e) {
    XPCollection<MyObject> collection = new XPCollection<MyObject>(session);
    collection.SkipReturnedObjects = e.BeginIndex;
    collection.TopReturnedObjects = e.EndIndex - e.BeginIndex + 1;
    collection.Criteria = new BinaryOperator("Title", String.Format("%{0}%", e.Filter), BinaryOperatorType.Like);
    collection.Sorting.Add(new SortProperty("Oid", DevExpress.Xpo.DB.SortingDirection.Ascending));

    cmb.DataSource = collection;
    cmb.DataBindItems();
}
person Mohammad Al-a'amour    schedule 23.07.2013