2012-06-27 21 views
1

我有一個綁定到bindingSource的xtraGrid控件(v12.1),最後從LINQ獲取數據到實體查詢(EF4.3.1),最終用戶可以過濾和排序gridView,我有一個Stimulsoft報告顯示用戶點擊PrintListButton時gridView的內容,如何獲取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(',', ' '); 
     }