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

Работа с редактируемыми полями ввода

Добавлено: 07 май 2008, 10:34
yura
Добрый день!
Подскажите пожалуйста возможно ли из программы на C# определить является ли текстовое поле в отчете редактируемое? Если да, то получить Name данного поля и его значение.
Заранее Вам благодарен.

Работа с редактируемыми полями ввода

Добавлено: 07 май 2008, 14:03
Vital
Здравствуйте,

Я думаю Вам помогут два метода класса 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;
			}
		}
Спасибо.