2012-06-27 3 views
1

У меня есть элемент управления xtraGrid (v12.1), привязанный к bindingSource, этот последний получает свои данные из запроса LINQ to entities (EF4.3.1), конечный пользователь может фильтровать и сортировать gridView, у меня есть отчет Stimulsoft, который показывает содержимое gridView, когда пользователь нажимает на PrintListButton, как получить фильтрованный и отсортированный источник данных xtragrid, чтобы прикрепить его к отчету? Спасибо.Как получить фильтрованный и отсортированный источник данных xtragrid?

ответ

1
var data = GetDataView(xtraGridControl1); 
report.RegData("List", data.ToTable()); 


     public DataView GetDataView(GridControl gc) 
     { 
      DataView dv = null; 

      if (gc.FocusedView != null && gc.FocusedView.DataSource != null) 
      { 
       var view = (ColumnView)gc.FocusedView; 
       var currentList = listBindingSource.List.CopyToDataTable().DefaultView; //(DataView) 

       var filterExpression = GetFilterExpression(view); 
       var sortExpression = GetSortExpression(view); 

       var currentFilter = currentList.RowFilter; 

       //create a new data view 
       dv = new DataView(currentList.Table) {Sort = sortExpression}; 

       if (filterExpression != String.Empty) 
       { 
        if (currentFilter != String.Empty) 
        { 
         currentFilter += " AND "; 
        } 
        currentFilter += filterExpression; 
       } 
       dv.RowFilter = currentFilter; 
      } 
      return dv; 
     } 

     public string GetFilterExpression(ColumnView view) 
     { 
      var expression = String.Empty; 

      if (view.ActiveFilter != null && view.ActiveFilterEnabled 
          && view.ActiveFilter.Expression != String.Empty) 
      { 
       expression = view.ActiveFilter.Expression; 
      } 
      return expression; 
     } 

     public string GetSortExpression(ColumnView view) 
     { 
      var expression = String.Empty; 
      foreach (GridColumnSortInfo info in view.SortInfo) 
      { 
       expression += string.Format("[{0}]", info.Column.FieldName); 

       if (info.SortOrder == DevExpress.Data.ColumnSortOrder.Descending) 
        expression += " DESC"; 
       else 
        expression += " ASC"; 
       expression += ", "; 
      } 
      return expression.TrimEnd(',', ' '); 
     }