Страница 1 из 1
Менять стиль заголовка и ячеек кросс-таблицы во время BeforePrint
Добавлено: 27 окт 2011, 16:50
finn
День али ночь добрые!
Провозившись с поиском, но так и не найдя ответа, решил создать топик.
Суть задачи: на шарпе написан проект WinForms, из-под него запускаю отчет. В отчете кросс-таблица, которая на дата-бэнде.
Мне необходимо в каждой печатаемой кросс-таблице менять стиль заголовка и стиль ячеек. Делать это нужно в приложении.
Решил, что буду создавать программно стили отчета (верная ли логика?), а на событии BeforePrint менять стиль.
Подобное не получилось, поэтому я начал с простейшего: пытаюсь во время BeforePrint изменить текст какой-либо ячейки. Не получается, значения не меняются. Пробовал и с ячейками, и с заголовками.
Привожу кусок кода, что я делаю не так?
Код: Выделить всё
report.Compile();
Stimulsoft.Report.Components.StiComponent component = report.CompiledReport.GetComponentByName("CrossTab1_Row1");
component.BeforePrint += new EventHandler(BeforePrint);
report.Show();
Код: Выделить всё
public void BeforePrint(Object sender,EventArgs e)
{
Stimulsoft.Report.CrossTab.StiCrossHeader tab = (Stimulsoft.Report.CrossTab.StiCrossHeader)sender;
tab.SetText("Стиль" + styleNum.ToString());
styleNum++;
}
Стимулсофт 2010.1 Ultimate
Спасибо.
Менять стиль заголовка и ячеек кросс-таблицы во время BeforePrint
Добавлено: 28 окт 2011, 13:25
Ivan
Здравствуйте.
Нам понадобится дополнительное время для подготовки ответа на ваш вопрос.
Спасибо.
Менять стиль заголовка и ячеек кросс-таблицы во время BeforePrint
Добавлено: 31 окт 2011, 05:52
Ivan
Здравствуйте.
finn писал(а): ... я начал с простейшего: пытаюсь во время BeforePrint изменить текст какой-либо ячейки. Не получается, значения не меняются. Пробовал и с ячейками, и с заголовками.
При компиляции отчета для каждого текстбокса создается отдельный метод TexBoxN_GetValue(), в котором и вычисляется его значение. Значение свойства Text в скомпилированном отчете не используется и не хранится.
finn писал(а):Решил, что буду создавать программно стили отчета (верная ли логика?), а на событии BeforePrint менять стиль.
Решение нормальное. Для изменения стиля вы можете использовать следующий код, например:
Код: Выделить всё
StiStyle style1 = new StiStyle();
style1.Brush = new StiSolidBrush(Color.FromArgb(255, 0, 255, 0)); //green
style1.SetStyleToComponent(Textbox1);
style1.SetStyleToComponent(CrossTab1_Column1_Title);
Пример отчета прикреплен к этому топику.
Спасибо.
Менять стиль заголовка и ячеек кросс-таблицы во время BeforePrint
Добавлено: 31 окт 2011, 14:31
finn
Спасибо, попробую! :matrix:
Менять стиль заголовка и ячеек кросс-таблицы во время BeforePrint
Добавлено: 01 ноя 2011, 02:48
Andrew
Здравствуйте.
Будет здорово, если дадите знать о результатах.
Спасибо.
Менять стиль заголовка и ячеек кросс-таблицы во время BeforePrint
Добавлено: 08 ноя 2011, 15:25
finn
Спасибо, все получилось.
Пришлось, конечно, в отладке посидеть, классы объектов понаблюдать, дабы понять, что к чему приводить:))))
Привожу участки кода, возможно, кому-либо понадобится.
Суть задачи вот в чем: в базе в виде дерева хранятся объявления, там же хранятся настройки для отображения (шрифт, цвет) каждой рубрики отдельно.
Соответственно, дерево отображаем кросс-таблицей, каждая кросс-таблица на отдельном бэнде (рубрика объявлений). Подвешиваемся на печать каждой кросс-таблицы и меняем стиль заголовков и ячеек. Стили задаем заранее.
Код: Выделить всё
report.Load(".\\mrt\\ExpandedAdsReport.mrt");
if (desing)
report.Design();
else
{
for (int i = 0; i < ((DataTable)report.DataStore["Data.RUBS"].ViewData).Rows.Count; i++)
{
StiStyle style;
CategoryStyle cs = CategoryStyle.getStyleCaption(int.Parse(((DataTable)report.DataStore["Data.RUBS"].ViewData).Rows[i]["category_id"].ToString()));
if (null != cs)
{
Stimulsoft.Base.Drawing.StiSolidBrush b;
style = new StiStyle("C" + ((DataTable)report.DataStore["Data.RUBS"].ViewData).Rows[i]["category_id"].ToString());
style.Font = cs.Font;
((Stimulsoft.Base.Drawing.StiSolidBrush)style.Brush).Color = cs.BackgroundColor;
((Stimulsoft.Base.Drawing.StiSolidBrush)style.TextBrush).Color = cs.FontColor;
report.Styles.Add(style);
}
cs = CategoryStyle.getStyleData(int.Parse(((DataTable)report.DataStore["Data.RUBS"].ViewData).Rows[i]["category_id"].ToString()));
if (null != cs)
{
style = new StiStyle("D" + ((DataTable)report.DataStore["Data.RUBS"].ViewData).Rows[i]["category_id"].ToString());
style.Font = cs.Font;
((Stimulsoft.Base.Drawing.StiSolidBrush)style.Brush).Color = cs.BackgroundColor;
((Stimulsoft.Base.Drawing.StiSolidBrush)style.TextBrush).Color = cs.FontColor;
report.Styles.Add(style);
}
}
report.Compile();
rubNo = 0;
Stimulsoft.Report.Components.StiComponent component = report.CompiledReport.GetComponentByName("CrossTab1");
component.BeforePrint += new EventHandler(BeforePrint);
report.Show();
Обработчик при печати каждой кросс-таблицы
Код: Выделить всё
static int rubNo = 0;
public void BeforePrint(Object sender,EventArgs e)
{
Stimulsoft.Report.CrossTab.StiCrossTab tab = (Stimulsoft.Report.CrossTab.StiCrossTab)sender;
string styleName = tab.Report.DataSources["RUBS"].Rows[rubNo]["category_id"].ToString();
rubNo++;
if (null == tab.Report.Styles["C" + styleName] && null == tab.Report.Styles["D" + styleName])
return;
StiStyle style = new StiStyle();
for (int i = 0; i < tab.GetComponents().Count; i++)
{
if ((tab.GetComponents()[i].Name.Contains("Title")|| tab.GetComponents()[i].Name.Contains("Column")) && null != tab.Report.Styles["C" + styleName])
{
style.GetStyleFromComponent(tab.GetComponents()[i], StiStyleElements.All);
style.Font = ((StiStyle)tab.Report.Styles["C" + styleName]).Font;
((Stimulsoft.Base.Drawing.StiSolidBrush)style.Brush).Color = ((Stimulsoft.Base.Drawing.StiSolidBrush)((StiStyle)tab.Report.Styles["C" + styleName]).Brush).Color;
((Stimulsoft.Base.Drawing.StiSolidBrush)style.TextBrush).Color = ((Stimulsoft.Base.Drawing.StiSolidBrush)((StiStyle)tab.Report.Styles["C" + styleName]).TextBrush).Color;
style.SetStyleToComponent(tab.GetComponents()[i]);
}
else if (null != tab.Report.Styles["D" + styleName])
{
style.GetStyleFromComponent(tab.GetComponents()[i], StiStyleElements.All);
style.Font = ((StiStyle)tab.Report.Styles["D" + styleName]).Font;
((Stimulsoft.Base.Drawing.StiSolidBrush)style.Brush).Color = ((Stimulsoft.Base.Drawing.StiSolidBrush)((StiStyle)tab.Report.Styles["D" + styleName]).Brush).Color;
((Stimulsoft.Base.Drawing.StiSolidBrush)style.TextBrush).Color = ((Stimulsoft.Base.Drawing.StiSolidBrush)((StiStyle)tab.Report.Styles["D" + styleName]).TextBrush).Color;
style.SetStyleToComponent(tab.GetComponents()[i]);
}
}
}
Менять стиль заголовка и ячеек кросс-таблицы во время BeforePrint
Добавлено: 09 ноя 2011, 02:49
Andrew
Здравствуйте.
Спасибо, что поделились опытом.