FilterHelper.cs
Upload User: linjidu
Upload Date: 2021-04-29
Package Size: 49798k
Code Size: 11k
Category:

CSharp

Development Platform:

C#

  1. #region Copyright (c) 2000-2009 Developer Express Inc.
  2. /*
  3. {*******************************************************************}
  4. {                                                                   }
  5. {       Developer Express .NET Component Library                    }
  6. {       XtraGrid                                 }
  7. {                                                                   }
  8. {       Copyright (c) 2000-2009 Developer Express Inc.              }
  9. {       ALL RIGHTS RESERVED                                         }
  10. {                                                                   }
  11. {   The entire contents of this file is protected by U.S. and       }
  12. {   International Copyright Laws. Unauthorized reproduction,        }
  13. {   reverse-engineering, and distribution of all or any portion of  }
  14. {   the code contained in this file is strictly prohibited and may  }
  15. {   result in severe civil and criminal penalties and will be       }
  16. {   prosecuted to the maximum extent possible under the law.        }
  17. {                                                                   }
  18. {   RESTRICTIONS                                                    }
  19. {                                                                   }
  20. {   THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES           }
  21. {   ARE CONFIDENTIAL AND PROPRIETARY TRADE                          }
  22. {   SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS   }
  23. {   LICENSED TO DISTRIBUTE THE PRODUCT AND ALL ACCOMPANYING .NET    }
  24. {   CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY.                 }
  25. {                                                                   }
  26. {   THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED      }
  27. {   FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE        }
  28. {   COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE       }
  29. {   AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT  }
  30. {   AND PERMISSION FROM DEVELOPER EXPRESS INC.                      }
  31. {                                                                   }
  32. {   CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON       }
  33. {   ADDITIONAL RESTRICTIONS.                                        }
  34. {                                                                   }
  35. {*******************************************************************}
  36. */
  37. #endregion Copyright (c) 2000-2009 Developer Express Inc.
  38. using System;
  39. using System.ComponentModel;
  40. using System.Drawing;
  41. using System.Collections;
  42. using System.Data;
  43. using System.Text;
  44. using System.Windows.Forms;
  45. using DevExpress.XtraEditors;
  46. using DevExpress.Data.Filtering;
  47. using DevExpress.XtraEditors.Repository;
  48. using DevExpress.XtraGrid.Columns;
  49. using DevExpress.XtraEditors.Controls;
  50. using DevExpress.Utils;
  51. using DevExpress.XtraGrid.Views.Base;
  52. using DevExpress.XtraGrid.Views.Grid;
  53. using System.Collections.Specialized;
  54. using DevExpress.XtraEditors.Filtering;
  55. using DevExpress.Data.Filtering.Helpers;
  56. namespace DevExpress.XtraGrid.FilterEditor {
  57. public class GridCriteriaHelper {
  58. public static bool IsAllowFilterEditor(ColumnView view) {
  59. if(!view.OptionsFilter.AllowFilterEditor)
  60. return false;
  61. GridView gView = view as GridView;
  62. if(gView != null && !gView.OptionsCustomization.AllowFilter)
  63. return false;
  64. if(!CriteriaToTreeProcessor.IsConvertibleOperator(view.ActiveFilter.Criteria))
  65. return false;
  66. foreach(GridColumn gc in view.Columns)
  67. if(view.IsColumnAllowFilter(gc)) return true;
  68. return false;
  69. }
  70. public static bool IsAllowFilterEditorForColumn(ColumnView view, GridColumn column) {
  71. if(column == null) return IsAllowFilterEditor(view);
  72. return IsAllowFilterEditor(view) && view.IsColumnAllowFilter(column);
  73. }
  74. [Obsolete("Use view.ShowFilterEditor(defaultColumn) instead")]
  75. public static void ShowFilterEditor(ColumnView view, GridColumn column) {
  76. view.ShowFilterEditor(column);
  77. }
  78. public static FilterColumn GetFilterColumnByGridColumn(FilterColumnCollection collection, GridColumn column) {
  79. if(column == null)
  80. return null;
  81. foreach(FilterColumn fColumn in collection) {
  82. GridFilterColumn gcfc = fColumn as GridFilterColumn;
  83. if(gcfc != null && column == gcfc.GridColumn)
  84. return fColumn;
  85. }
  86. FilterColumn result = null;
  87. foreach(FilterColumn fColumn in collection) {
  88. if(fColumn.FieldName == column.FieldName)
  89. result = fColumn;
  90. if(fColumn.ColumnCaption == column.GetTextCaption())
  91. return result;
  92. }
  93. return result;
  94. }
  95. public static RepositoryItem CreateDisplayTextEditor(GridColumn gridColumn) {
  96. RepositoryItem edit;
  97. object[] popupValues = GetFilterPopupValues(gridColumn);
  98. if(popupValues == null || popupValues.Length < 1) {
  99. edit = new RepositoryItemTextEdit();
  100. }
  101. else {
  102. RepositoryItemComboBox cmbb = new RepositoryItemComboBox();
  103. cmbb.TextEditStyle = TextEditStyles.Standard;
  104. cmbb.Items.AddRange(popupValues);
  105. edit = cmbb;
  106. }
  107. return edit;
  108. }
  109. static object[] GetFilterPopupValues(GridColumn column) {
  110. return column.View.DataController.FilterHelper.GetUniqueColumnValues(column.ColumnHandle, -1, true, false);
  111. }
  112. [Obsolete("Use CriteriaOperator.TryParse function instead")]
  113. public static CriteriaOperator ParseFailSafe(string filterString) {
  114. return CriteriaOperator.TryParse(filterString);
  115. }
  116. public static bool IsColumnFiltered(GridColumn col, CriteriaOperator additionalFilter) {
  117. if(col.FilterInfo.Type != ColumnFilterType.None)
  118. return true;
  119. else
  120. return ColumnsContainedCollector.IsContained(additionalFilter, new OperandProperty(col.FieldName));
  121. }
  122. }
  123. public class GridFilterColumn : FilterColumn {
  124. public readonly GridColumn GridColumn;
  125. RepositoryItem resolvedEditor;
  126. Type resolvedType;
  127. string resolvedCaption;
  128. Image resolvedImage;
  129. public GridFilterColumn(GridColumn gridColumn)
  130. : base() {
  131. this.GridColumn = gridColumn;
  132. this.resolvedImage = null;
  133. }
  134. public override RepositoryItem ColumnEditor {
  135. get {
  136. if(resolvedEditor == null)
  137. resolvedEditor = CreateRepository();
  138. return resolvedEditor;
  139. }
  140. }
  141. public override FilterColumnClauseClass ClauseClass {
  142. get {
  143. if(GridColumn.GetFilterMode() == ColumnFilterMode.DisplayText) {
  144. return FilterColumnClauseClass.String;
  145. } else if(ColumnEditor is RepositoryItemLookUpEditBase || ColumnEditor is RepositoryItemImageComboBox || ColumnEditor is RepositoryItemRadioGroup) {
  146. return FilterColumnClauseClass.Lookup;
  147. } else if(ColumnEditor is RepositoryItemPictureEdit || ColumnEditor is RepositoryItemImageEdit) {
  148. return FilterColumnClauseClass.Blob;
  149. } else if(GridColumn.ColumnType == typeof(string)) {
  150. return FilterColumnClauseClass.String;
  151. } else if(GridColumn.ColumnType == typeof(DateTime) || GridColumn.ColumnType == typeof(DateTime?)) {
  152. return FilterColumnClauseClass.DateTime;
  153. } else {
  154. return FilterColumnClauseClass.Generic;
  155. }
  156. }
  157. }
  158. public override void Dispose() {
  159. base.Dispose();
  160. if(resolvedEditor != null) {
  161. resolvedEditor.Dispose();
  162. resolvedEditor = null;
  163. }
  164. }
  165. protected virtual RepositoryItem CreateRepository() {
  166. if(GridColumn.GetFilterMode() == ColumnFilterMode.DisplayText) {
  167. return GridCriteriaHelper.CreateDisplayTextEditor(GridColumn);
  168. } else {
  169. RepositoryItem columnEdit = GridColumn.RealColumnEdit;
  170. if(columnEdit == null) {
  171. return new RepositoryItemTextEdit();
  172. } else if(columnEdit is RepositoryItemBaseProgressBar) {
  173. return new RepositoryItemSpinEdit();
  174. } else if(columnEdit is RepositoryItemMemoEdit) {
  175. RepositoryItem result = new RepositoryItemMemoExEdit();
  176. ((RepositoryItemMemoExEdit)result).ShowIcon = false;
  177. return result;
  178. } else if(columnEdit is RepositoryItemRadioGroup) {
  179. RepositoryItemImageComboBox edit = new RepositoryItemImageComboBox();
  180. foreach(RadioGroupItem item in ((RepositoryItemRadioGroup)columnEdit).Items)
  181. edit.Items.Add(new ImageComboBoxItem(item.Description, item.Value, -1));
  182. return edit;
  183. } else {
  184. RepositoryItem result = (RepositoryItem)columnEdit.Clone();
  185. result.Assign(columnEdit);
  186. result.ResetEvents();
  187. return result;
  188. }
  189. }
  190. }
  191. protected virtual string ResolveCaption() {
  192. string tempCaption = GridColumn.GetTextCaption();
  193. if(tempCaption == null)
  194. tempCaption = string.Empty;
  195. tempCaption = tempCaption.Replace('n', ' ');
  196. tempCaption = tempCaption.Replace('r', ' ');
  197. tempCaption = tempCaption.Replace('t', ' ');
  198. if(tempCaption != GridColumn.GetTextCaption())
  199. tempCaption.Replace("  ", " ").Replace("  ", " ");
  200. return tempCaption;
  201. }
  202. static Image GetImage(GridColumn column) {
  203. return ImageCollection.GetImageListImage(column.Images, column.ImageIndex);
  204. }
  205. public override string ColumnCaption {
  206. get {
  207. if(resolvedCaption == null) {
  208. resolvedCaption = ResolveCaption();
  209. }
  210. return resolvedCaption;
  211. }
  212. }
  213. public override Type ColumnType {
  214. get {
  215. if(resolvedType == null) {
  216. resolvedType = ResolveType();
  217. }
  218. return resolvedType;
  219. }
  220. }
  221. protected virtual Type ResolveType() {
  222. Type result = GridColumn.ColumnType;
  223. #if DXWhidbey
  224. Type underlyingType = Nullable.GetUnderlyingType(result);
  225. if(underlyingType != null)
  226. result = underlyingType;
  227. #endif
  228. return result;
  229. }
  230. public override string FieldName {
  231. get { return GridColumn.FieldName; }
  232. }
  233. public override Image Image {
  234. get {
  235. if(resolvedImage == null)
  236. return GetImage(GridColumn);
  237. return resolvedImage;
  238. }
  239. }
  240. public virtual void SetRepositoryItem(RepositoryItem item) {
  241. resolvedEditor = item;
  242. }
  243. public override void SetColumnEditor(RepositoryItem item) {
  244. SetRepositoryItem(item);
  245. }
  246. public override void SetColumnCaption(string caption) {
  247. resolvedCaption = caption;
  248. }
  249. public override void SetImage(Image image) {
  250. resolvedImage = image;
  251. }
  252. }
  253. public class ViewFilterColumnCollection : FilterColumnCollection {
  254. public readonly ColumnView View;
  255. public ViewFilterColumnCollection(ColumnView view) {
  256. this.View = view;
  257. Fill();
  258. }
  259. protected virtual bool IsValidForFilter(GridColumn gc) {
  260. if(!gc.Visible && !gc.OptionsColumn.ShowInCustomizationForm)
  261. return false;
  262. if(gc.FilterInfo != null && !ReferenceEquals(gc.FilterInfo.FilterCriteria, null))
  263. return true;
  264. return View.IsColumnAllowFilter(gc);
  265. }
  266. protected virtual FilterColumn CreateFilterColumn(GridColumn gridColumn) {
  267. return new GridFilterColumn(gridColumn);
  268. }
  269. protected virtual void Fill() {
  270. if(View == null) return;   
  271. foreach(GridColumn gc in View.Columns) {
  272. if(IsValidForFilter(gc))
  273. this.Add(CreateFilterColumn(gc));
  274. }
  275. }
  276. public override string GetValueScreenText(OperandProperty property, object value) {
  277. FilterColumn col = this[property];
  278. if(col == null)
  279. return base.GetValueScreenText(property, value);
  280. GridColumn gcol = View.Columns[col.FieldName];
  281. if(gcol == null)
  282. return base.GetValueScreenText(property, value);
  283. return View.GetFilterDisplayTextByColumn(gcol, value);
  284. }
  285. }
  286. [ToolboxItem(false)]
  287. public class GridFilterControl : FilterControl {
  288. }
  289. }