Добрый день!
Подскажите пожалуйста возможно ли из программы на C# определить является ли текстовое поле в отчете редактируемое? Если да, то получить Name данного поля и его значение.
Заранее Вам благодарен.
Работа с редактируемыми полями ввода
Работа с редактируемыми полями ввода
Здравствуйте,
Я думаю Вам помогут два метода класса StiReport - SaveEditableFields и LoadEditableFields. Методы добавлены недавно. Ниже я приведу их исходный код, чтобы Вы увидели как они работают если вдруг понадобится своя реализация.
Спасибо.
Я думаю Вам помогут два метода класса StiReport - SaveEditableFields и LoadEditableFields. Методы добавлены недавно. Ниже я приведу их исходный код, чтобы Вы увидели как они работают если вдруг понадобится своя реализация.
Код: Выделить всё
public void SaveEditableFields(Stream stream)
{
StiLogService.Write(typeof(StiReport), "Saving the editable fields of rendered report.");
try
{
StiEditableItemsContainer container = new StiEditableItemsContainer();
int pageIndex = 0;
foreach (StiPage page in this.RenderedPages)
{
Hashtable pos = new Hashtable();
StiComponentsCollection comps = page.GetComponents();
foreach (StiComponent comp in comps)
{
IStiEditable editable = comp as IStiEditable;
if (editable != null && editable.Editable)
{
int position = 1;
if (pos[comp.Name] != null)position = ((int)pos[comp.Name]) + 1;
container.Items.Add(new StiEditableItem(pageIndex, position, comp.Name, editable.SaveState()));
position ++;
pos[comp.Name] = position;
}
}
pageIndex++;
}
StiSerializing ser = new StiSerializing(new StiReportObjectStringConverter());
ser.Serialize(container, stream, "Editable Fields of Rendered Report");
}
catch (Exception e)
{
StiLogService.Write(this.GetType(), "Saving the editable fields of rendered report...ERROR");
StiLogService.Write(this.GetType(), e);
if (!StiReport.HideExceptions)throw;
}
}
Код: Выделить всё
public void LoadEditableFields(Stream stream)
{
StiLogService.Write(typeof(StiReport), "Loading the editable fields of rendered report.");
try
{
StiEditableItemsContainer container = new StiEditableItemsContainer();
StiSerializing ser = new StiSerializing(new StiReportObjectStringConverter());
ser.Deserialize(container, stream, "Editable Fields of Rendered Report");
foreach (StiEditableItem item in container.Items)
{
int pageIndex = item.PageIndex;
int position = item.Position;
if (pageIndex < this.RenderedPages.Count)
{
StiPage page = this.RenderedPages[pageIndex];
StiComponentsCollection comps = page.GetComponents();
foreach (StiComponent comp in comps)
{
IStiEditable editable = comp as IStiEditable;
if (editable != null && editable.Editable && comp.Name == item.ComponentName)
{
if (position == 1)
{
editable.RestoreState(item.TextValue);
break;
}
else position--;
}
}
}
}
}
catch (Exception e)
{
StiLogService.Write(this.GetType(), "Loading the editable fields of rendered report...ERROR");
StiLogService.Write(this.GetType(), e);
if (!StiReport.HideExceptions)throw;
}
}