public void TestGetFormulaHighlightedHtml() { var markup = PerformerStatField.GetFormulaHighlightedHtml("Sharp*((Sub > 10)&(AL<5)&(DD<30))"); Assert.IsTrue(markup.Contains("title=\""), "GetFormulaHighlightedHtml() - должны быть гиперссылки с заголовками"); markup = PerformerStatField.GetFormulaHighlightedHtml("((P>15)&(Sub>0)&(Eq>500)&(DD<20))*AYP"); Assert.IsFalse(markup.Contains("aypp"), "GetFormulaHighlightedHtml() - некорректны (вложенные) гиперссылки"); }
public PerformerCriteriaFunction(PerformerCriteriaFunction funct) { function = funct.function; Description = funct.Description; PreferredSortOrder = funct.PreferredSortOrder; MarginValue = funct.MarginValue; filters = new List <Cortege3 <PerformerStatField, ExpressionOperator, double> >(funct.filters); SortField = funct.SortField; IsExpressionParsed = funct.IsExpressionParsed; }
// установка минимальной ширины колонки неперед (имеет смысл только для числовых данных), // исходя из необходимости хранить данные всего диапазона значений данной колонки; // такая установка исключает какие-либо иные установки ширины в дальнейшем; // исключена из SetupGrid private void DetermineColumnDisplaySettings(FastColumn col, PerformerStatField field, Graphics graphics) { // определить минимальную ширину колонки из размеров ее заголовка var font = grid.FontHeader ?? grid.Font; var textWd = (int)Math.Ceiling(graphics.MeasureString(col.Title, font).Width); // добавить ширину значка сортировки textWd += 8; col.ColumnMinWidth = textWd; // если колонка содержит число, задать ей соответствующую ширину фиксированной var prop = typeof(PerformerStatEx).GetProperties().FirstOrDefault(p => p.Name == field.PropertyName); if (prop == null) { return; } var propType = prop.PropertyType; var nulType = Nullable.GetUnderlyingType(propType); propType = nulType ?? propType; // для целочисленных if (propType == typeof(int) || propType == typeof(short) || propType == typeof(long) || propType == typeof(uint) || propType == typeof(ushort) || propType == typeof(ulong)) { var wd = (int)Math.Ceiling(graphics.MeasureString("-19 999 999", font).Width); col.ColumnWidth = Math.Max(wd, col.ColumnMinWidth); return; } // для вещественных if (propType == typeof(float) || propType == typeof(double) || propType == typeof(decimal)) { const double number = -9000500.25; var str = number.ToStringUniformMoneyFormat(); try { if (!string.IsNullOrEmpty(field.FormatString)) { str = number.ToString(field.FormatString); } } catch { } var wd = (int)Math.Ceiling(graphics.MeasureString(str, font).Width); col.ColumnWidth = Math.Max(wd, col.ColumnMinWidth); //return; } }
public void TestParseSimpleFormula() { List <Cortege3 <PerformerStatField, ExpressionOperator, double> > filters; PerformerStatField sortField; var rst = PerformerStatField.ParseSimpleFormula("Sharp*((Sub > 10)&(AL<5)&(DD<30))", out filters, out sortField); Assert.IsTrue(rst, "ParseSimpleFormula - таки должна распарситься"); rst = PerformerStatField.ParseSimpleFormula("AYP", out filters, out sortField); Assert.IsTrue(rst, "ParseSimpleFormula - таки снова должна распарситься"); Assert.AreEqual("AYP", sortField.ExpressionParamName, "Критерий сортировки должен быть AYP"); rst = PerformerStatField.ParseSimpleFormula("(P>15)", out filters, out sortField); Assert.IsFalse(rst, "ParseSimpleFormula - не должна распарситься, нет фильтра"); }
public FilterObject(PerformerStatField field = null) { if (field == null) { return; } Name = field.ExpressionParamName; Title = field.ExpressionParamTitle; if (field.DefaultOperator.HasValue) { Operator = field.DefaultOperator.Value; } if (field.DefaultValue.HasValue) { Value = field.DefaultValue.Value; } }
public void SetupPortfolio(TopPortfolio portfolio) { this.portfolio = portfolio; lblPortfolioName.Text = (portfolio.IsCompanyPortfolio ? (Localizer.GetString("TitlePortfolio") + " \"" + portfolio.Name + "\"") : (Localizer.GetString("TitleUserPortfolio")) + " [" + portfolio.ParticipantCount + "]"); // сформировать формулу с подсветкой formulaBrowser.DocumentText = PerformerStatField.GetFormulaHighlightedHtml(portfolio.Criteria); tbCount.Value = portfolio.ParticipantCount; if (portfolio.IsCompanyPortfolio) { tbCount.Enabled = false; } }