2013-07-22 4 views
1

Я попытался отфильтровать ASPxComboBox, который получает данные с использованием XpoDataSource, обратите внимание, что восстановление и фильтрация данных из небольшого набора данных работает нормально, проблема начинается, когда я пытаюсь фильтровать большой набор данных - около 70000 записей - из источника данных загрузка ComboBox становится очень медленной, так как XpoDataSource получает все данные из таблицы базы данных. Итак, я создал критерии для XpoDataSource, чтобы уменьшить количество восстановленных записей, тогда ComboBox продолжает повторять 10 лучших записей при прокрутке ComboBox, я не знаю, где проблема.ASPXComboBox Filtering Large DataSet с использованием XpoDataSource (DevExpress)

я понял, что мне нужно, это похоже на пример в следующем link

Но используя 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); 
     } 
    } 
+0

Почему вы не обратитесь в службу поддержки DevExpress напрямую? – Mikhail

+0

Я думаю, что я собираюсь сделать это сейчас –

ответ

0

Этот Example демонстрирует ответ на мой вопрос

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(); 
}