2013-07-22 9 views
1

XpoDataSource를 사용하여 데이터를 가져 오는 ASPxComboBox를 필터링하려고했습니다. 작은 데이터 집합에서 데이터를 복원하고 필터링하면 문제가 없습니다. 큰 데이터 집합을 필터링하려고 할 때 문제가 발생합니다. 약 70000 레코드 - XpoDataSource가 데이터베이스 테이블에서 모든 데이터를 가져 오기 때문에 데이터 소스에서 ComboBox 로딩이 매우 느립니다. 그래서 복원 된 레코드 수를 줄이기 위해 XpoDataSource에 대한 조건을 만들었고 ComboBox는 ComboBox를 스크롤하는 동안 상위 10 개 레코드를 반복하여 보관합니다. 문제가있는 곳을 모르겠습니다. ASPxComboBox XpoDataSource (DevExpress)를 사용하여 대용량 데이터 집합을 필터링하는 중입니다.

은 내가 필요한 다음 link

의 예와 유사하지만 그 대신 SqlDataSource1의 XpoDataSource을 사용하고 있음을 깨달았다. 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(); 
}