Страница 1 из 1

Cross-tab highlighting

Добавлено: 29 июл 2010, 07:48
Леонид
Ещё одна важная вещь.

Для примера можете использовать Ваш отчёт из демки под названием Cross-Tab with Highlight Condition.

Заходим в Design, выделям CrossTab1_Sum1 и выставляем свойство Summary в None (было Sum). None мне нужно для высчитывания процентов вручную в событии ProcessCellEvent, т.е. при этом суммировать мне не нужно, поэтому я и убираю Sum. Но когда я ставлю в Conditions (в Вашем примере, Expression: value 0, то зелёный цвет, а value < 0 - красный цвет, то получаю Exception следующего содержания:

error CS0019: Operator '<' cannot be applied to operands of type 'object' and 'int'

При этом в коде это выглядит так:

Код: Выделить всё

            object value = 0;
            if (e.Value is object)
            {
                value = ((object)(e.Value));
            }
            string tag = ((StiComponent)sender).TagValue as string;
            string tooltip = ((StiComponent)sender).ToolTipValue as string;
            string hyperlink = ((StiComponent)sender).HyperlinkValue as string;
            if (value < 20)
...
А когда ставлю свойство Summary в Sum, то код выглядит как и должен:

Код: Выделить всё

            decimal value = 0;
            if (e.Value is decimal)
            {
                value = ((decimal)(e.Value));
            }
            string tag = ((StiComponent)sender).TagValue as string;
            string tooltip = ((StiComponent)sender).ToolTipValue as string;
            string hyperlink = ((StiComponent)sender).HyperlinkValue as string;
            if (value < 20)
...

Любые попытки приведения к нужному типу (вроде

Код: Выделить всё

decimal(value) < 20
или

Код: Выделить всё

(int)value < 20
) заканчиваются ошибкой: CrossTab1_Sum1 Specified cast is not valid.

Вопрос. Как быть, если необходимо использовать событие ProcessCellEvent, при котором свойство Summary должно быть непременно None, а также использовать Conditions для раскраски необходимых колонок по условию.

Cross-tab highlighting

Добавлено: 02 авг 2010, 04:52
Jan
Здравствуйте,

В данном случае e.Value содержит значение строкового типа. Попробуйте использовать следующее выражение:

Код: Выделить всё

decimal.Parse(e.Value as string) < 20
Спасибо.

Cross-tab highlighting

Добавлено: 02 авг 2010, 05:03
Jan
Здравствуйте,
leon писал(а):Вопрос. Как быть, если необходимо использовать событие ProcessCellEvent, при котором свойство Summary должно быть непременно None, а также использовать Conditions для раскраски необходимых колонок по условию.
Можно сделать это в событии ProcessCell:

Код: Выделить всё

decimal value = 0;
if (decimal.TryParse(e.Text, out value))
{
	if (value > 100)
	e.Cell.Field.Brush = new StiSolidBrush(Color.Red);
}
Спасибо.

Cross-tab highlighting

Добавлено: 03 авг 2010, 10:44
Леонид
Всё заработало! :biggrin:

Второй вариант (через ProcessCellEvent) даже удобнее.

Большое спасибо!