Страница 1 из 1
Condition для ячеек CrossTab
Добавлено: 04 дек 2015, 19:15
bear
пытаюсь поставить условие изменение цвета ячейки. условия прописаны, и работают только если Summary установлено в "Sum" если установить "None" - цвета пропадают.
Что я неверно делаю?
Re: Condition для ячеек CrossTab
Добавлено: 07 дек 2015, 09:26
HighAley
Здравствуйте.
В случае использования Summary = None, value в Conditions имеет тип object.
Попробуйте в выражении явно преобразовать тип. Например,
На вашем примере проверить не удалось из-за отсутствия данных.
В нашем Demo после данных изменений всё заработало.
Если у вас всё ещё есть проблемы, пришлите нам отчёт с данными.
Спасибо.
Re: Condition для ячеек CrossTab
Добавлено: 10 дек 2015, 10:39
Леонид
Добрый день!
Можно ещё прописать условие явно в событии ProcessCell, например так:
Код: Выделить всё
decimal value = 0;
if (decimal.TryParse(e.Text, out value))
{
e.Cell.Field.Brush = (value > 0) ? new StiSolidBrush(Color.Chartreuse) : new StiSolidBrush(Color.Red);
// или, если много условий, то пропишите их и присвойте e.Cell.Field.Brush
}
Re: Condition для ячеек CrossTab
Добавлено: 10 дек 2015, 17:02
bear
спасибо за ответ. попробую
есть ли ссылка на примеры с "ProcessCell"?. некоторые мною найденные ссылки на примеры не работали, а, например, из информации по ссылке
http://support.stimulsoft.com/index.php ... -cross-tab не ясно, из какого класса это событие.
Re: Condition для ячеек CrossTab
Добавлено: 11 дек 2015, 10:46
Леонид
Доброе утро!
В вашем отчёте в ячейке CrossTab1_Sum1 в событии ProcessCell прописываете вашу "раскраску" так (можете прямо вставить код, как есть, будет работать, т.к. проверено на вашем же отчёте):
Код: Выделить всё
double val = 0; // здесь сами смотрите на размерность (у нас в Oracle используется decimal)
// value == null
if (e.Text == string.Empty)
{
e.Cell.Field.Brush = new StiSolidBrush(Color.DarkGray); // cell color
e.Cell.Field.TextBrush = new StiSolidBrush(Color.Red); // text color
return;
}
// прочие условия
if (double.TryParse(e.Text, out val))
{
if (val > 0 && val < 10.0)
{
e.Cell.Field.Brush = new StiSolidBrush(Color.Green);
return;
}
if (val >= 10 && val < 50.0)
{
e.Cell.Field.Brush = new StiSolidBrush(Color.Yellow);
return;
}
if (val >= 50 && val < 90.0)
{
e.Cell.Field.Brush = new StiSolidBrush(Color.Brown);
return;
}
if (val >= 90)
{
e.Cell.Field.Brush = new StiSolidBrush(Color.Red);
return;
}
}
В Conditions, соответственно всё удаляете, и можно запускать.
P.S. Так для справки. Всегда смотрите в таких случае, что генерирует код Stimul'а (вкладка Code), в вашем случае Conditions выглядят так (код, понятное дело избыточный, т.к. это написано не человеком):
Код: Выделить всё
// CheckerInfo: Conditions CrossTab1_Sum1
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 != null && (double)value >= 90))
{
((Stimulsoft.Report.Components.IStiTextBrush)(sender)).TextBrush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Black);
((Stimulsoft.Report.Components.IStiBrush)(sender)).Brush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Red);
Stimulsoft.Report.Components.StiConditionHelper.ApplyFont(sender, new System.Drawing.Font("Arial Narrow", 6F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0), Stimulsoft.Report.Components.StiConditionPermissions.All);
((Stimulsoft.Report.Components.IStiBorder)(sender)).Border = ((Stimulsoft.Base.Drawing.StiBorder)(((Stimulsoft.Report.Components.IStiBorder)(sender)).Border.Clone()));
((Stimulsoft.Report.Components.IStiBorder)(sender)).Border.Side = Stimulsoft.Base.Drawing.StiBorderSides.All;
((Stimulsoft.Report.Components.StiComponent)(sender)).Enabled = true;
}
if ((value != null && (double)value >= 50 && (double)value < 90.0))
{
((Stimulsoft.Report.Components.IStiTextBrush)(sender)).TextBrush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Black);
((Stimulsoft.Report.Components.IStiBrush)(sender)).Brush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Orange);
Stimulsoft.Report.Components.StiConditionHelper.ApplyFont(sender, new System.Drawing.Font("Arial Narrow", 6F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0), Stimulsoft.Report.Components.StiConditionPermissions.All);
((Stimulsoft.Report.Components.IStiBorder)(sender)).Border = ((Stimulsoft.Base.Drawing.StiBorder)(((Stimulsoft.Report.Components.IStiBorder)(sender)).Border.Clone()));
((Stimulsoft.Report.Components.IStiBorder)(sender)).Border.Side = Stimulsoft.Base.Drawing.StiBorderSides.All;
((Stimulsoft.Report.Components.StiComponent)(sender)).Enabled = true;
}
if ((value != null && (double)value >= 10 && (double)value < 50.0))
{
((Stimulsoft.Report.Components.IStiTextBrush)(sender)).TextBrush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Black);
((Stimulsoft.Report.Components.IStiBrush)(sender)).Brush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Yellow);
Stimulsoft.Report.Components.StiConditionHelper.ApplyFont(sender, new System.Drawing.Font("Arial Narrow", 6F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0), Stimulsoft.Report.Components.StiConditionPermissions.All);
((Stimulsoft.Report.Components.IStiBorder)(sender)).Border = ((Stimulsoft.Base.Drawing.StiBorder)(((Stimulsoft.Report.Components.IStiBorder)(sender)).Border.Clone()));
((Stimulsoft.Report.Components.IStiBorder)(sender)).Border.Side = Stimulsoft.Base.Drawing.StiBorderSides.All;
((Stimulsoft.Report.Components.StiComponent)(sender)).Enabled = true;
}
if ((value != null && (double)value > 0 && (double)value < 10.0))
{
((Stimulsoft.Report.Components.IStiTextBrush)(sender)).TextBrush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Black);
((Stimulsoft.Report.Components.IStiBrush)(sender)).Brush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.PaleGreen);
Stimulsoft.Report.Components.StiConditionHelper.ApplyFont(sender, new System.Drawing.Font("Arial Narrow", 6F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0), Stimulsoft.Report.Components.StiConditionPermissions.All);
((Stimulsoft.Report.Components.IStiBorder)(sender)).Border = ((Stimulsoft.Base.Drawing.StiBorder)(((Stimulsoft.Report.Components.IStiBorder)(sender)).Border.Clone()));
((Stimulsoft.Report.Components.IStiBorder)(sender)).Border.Side = Stimulsoft.Base.Drawing.StiBorderSides.All;
((Stimulsoft.Report.Components.StiComponent)(sender)).Enabled = true;
}
if ((value == null))
{
((Stimulsoft.Report.Components.IStiTextBrush)(sender)).TextBrush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Red);
((Stimulsoft.Report.Components.IStiBrush)(sender)).Brush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Silver);
Stimulsoft.Report.Components.StiConditionHelper.ApplyFont(sender, new System.Drawing.Font("Arial Narrow", 6F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0), Stimulsoft.Report.Components.StiConditionPermissions.All);
((Stimulsoft.Report.Components.IStiBorder)(sender)).Border = ((Stimulsoft.Base.Drawing.StiBorder)(((Stimulsoft.Report.Components.IStiBorder)(sender)).Border.Clone()));
((Stimulsoft.Report.Components.IStiBorder)(sender)).Border.Side = Stimulsoft.Base.Drawing.StiBorderSides.All;
((Stimulsoft.Report.Components.StiComponent)(sender)).Enabled = true;
}
Re: Condition для ячеек CrossTab
Добавлено: 16 дек 2015, 14:25
bear
спасибо. приму к сведению.
к сожалению, у меня код в закладке Code показывается только в случае ошибок в mrt файле. обычно закладка пустая.
Re: Condition для ячеек CrossTab
Добавлено: 16 дек 2015, 19:13
Jan
Здравствуйте,
Код не показывается для ускорения работы дизайнера отчетов, для того, чтобы не приходилось перегиенрировать его в случае изменений в отчете. Это критично для многих тяжелых отчетов. Отображение кода можно включить в контекстном меню редактора кода. Посмотрите картинку из приложения.
Спасибо.
Re: Condition для ячеек CrossTab
Добавлено: 17 дек 2015, 19:00
bear
спасибо. но было бы нагляднее включать еще и через меню и тулбар.
Подозрительный код в табе с кодом никак не наводит на мысль, что что-то отключено. первая и единственная мысль, что не работает. хотя точно помню, что год назад было и работало.
предлагаю код вообще убрать и сделать кнопку - включить код.
Re: Condition для ячеек CrossTab
Добавлено: 18 дек 2015, 09:11
HighAley
Здравствуйте.
Мы попробуем, что-нибудь сделать, чтобы такой проблемы больше не возникало.
Спасибо.