internal void FilterIt(GridFilterInfo filter) { try { // first for rowExpression foreach (MyGrid grid in m_grids) { foreach (Xceed.Grid.DataRow row in grid.DataRows) { row.Visible = true; } } if (!string.IsNullOrEmpty(filter.RowExpression)) { string[] expressions = filter.RowExpression.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); foreach (string expression in expressions) { int idx = expression.IndexOf(':'); if (idx == -1) { throw new ArgumentException("Invalid expression format"); } string gridName = expression.Substring(0, idx).Trim(); string realExpression = expression.Substring(idx + 1).Trim(); MyGrid grid = FindGridByName(gridName); if (grid == null) { throw new ArgumentException("Invalid Grid Name"); } EvaluationEngine.Parser.Token token = new EvaluationEngine.Parser.Token(realExpression); MatchCollection mc = m_regex.Matches(realExpression); foreach (Xceed.Grid.DataRow row in grid.DataRows) { Dictionary <string, string> variables = new Dictionary <string, string>(); foreach (Match m in mc) { variables[m.Groups[1].Value] = m.Groups[0].Value; } foreach (KeyValuePair <string, string> kvp in variables) { if (row.Cells[kvp.Key] == null) { throw new ArgumentException("Invalid Grid Cell's Name"); } else { if (row.Cells[kvp.Key].ParentColumn.DataType == typeof(string)) { token.Variables[kvp.Value].VariableValue = row.Cells[kvp.Key].GetDisplayText() == null ? string.Empty : row.Cells[kvp.Key].GetDisplayText(); } else { token.Variables[kvp.Value].VariableValue = row.Cells[kvp.Key].Value == null ? string.Empty : row.Cells[kvp.Key].Value. ToString(); } } } EvaluationEngine.Evaluate.Evaluator eval = new EvaluationEngine.Evaluate.Evaluator(token); string ErrorMsg = ""; string result = ""; if (eval.Evaluate(out result, out ErrorMsg) == false) { throw new InvalidOperationException("Error evaluating the tokens: " + ErrorMsg + System.Environment.NewLine + expression); } row.Visible = (result == "true"); } } } // Then for columnExpression foreach (MyGrid grid in m_grids) { foreach (Xceed.Grid.Column column in grid.Columns) { column.Fixed = false; } } if (!string.IsNullOrEmpty(filter.ColumnExpression)) { string[] expressions = filter.ColumnExpression.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); foreach (string expression in expressions) { int idx = expression.IndexOf(':'); if (idx == -1) { throw new ArgumentException("Invalid expression format"); } string gridName = expression.Substring(0, idx).Trim(); string realExpression = expression.Substring(idx + 1).Trim(); MyGrid grid = FindGridByName(gridName); grid.BeginInit(); if (grid == null) { throw new ArgumentException("Invalid Grid Name"); } EvaluationEngine.Parser.Token token = new EvaluationEngine.Parser.Token(realExpression); MatchCollection mc = m_regex.Matches(realExpression); foreach (Xceed.Grid.Column column in grid.Columns) { Dictionary <string, string> variables = new Dictionary <string, string>(); foreach (Match m in mc) { if (m.Groups[0].Value != "$ColumnName$") { throw new NotSupportedException("ColumnExpression Format is invalid !"); } variables[m.Groups[1].Value] = m.Groups[0].Value; } foreach (KeyValuePair <string, string> kvp in variables) { token.Variables[kvp.Value].VariableValue = column.FieldName; } EvaluationEngine.Evaluate.Evaluator eval = new EvaluationEngine.Evaluate.Evaluator(token); string ErrorMsg = ""; string result = ""; if (eval.Evaluate(out result, out ErrorMsg) == false) { throw new InvalidOperationException("Error evaluating the tokens: " + ErrorMsg + System.Environment.NewLine + expression); } column.Fixed = (result == "true"); } grid.EndInit(); } } } catch (Exception ex) { ExceptionProcess.ProcessWithNotify(ex); } }