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

Динамическое название панели, в зависимости от переменной

Добавлено: 30 окт 2018, 11:21
Vumse
Добрый день,
Столкнулся с проблемой. Есть строка с множеством элементов и разделителями ";". Каждый элемент строки(txt) выводится в виде текста и помещается в создаваемую панель(pnl), которая в свою очередь помещается в более большую создаваемую панель(Block) (прошу прощения за наркоманию). Требуется чтобы в один Block размещалось только заданное кол-во pnl (в данный момент 2), после чего создается новый Block с последующим наполнением и т.д.
Т.е в итоге должны быть созданы (Block1, Block2, ....) в зависимости от количества элементов.
На данный момент присутствует следующий код, который к сожалению не работает. Изначально хотелось бы понять возможна ли такая реализация или же придется самостоятельно создавать большой объем панелей, которые будут удаляться при отсутствии в них информации?
Благодарю

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

		public void SpecialConditionsInit()
		{			
			string DText = "Три;Два;Раз;Value;Class;Superior";			
			String [] specialConditionLine = DText.Split(new Char [] {';'});			
			foreach (String item in specialConditionLine)
			{
				PanelControl(System.Convert.ToString(item));
			}
		}
		Double count = 0;
		Double Line = 0;
		
		public void PanelControl(String CText)
		{			
			if( String.IsNullOrEmpty(CText) )
				return;
					
			//
			// Панель для текста
			//
			StiPanel pnl = new StiPanel();
			pnl.CanGrow = true;
			pnl.ClientRectangle = new Stimulsoft.Base.Drawing.RectangleD(0, 0, 7, 0.4);
			pnl.DockStyle = Stimulsoft.Report.Components.StiDockStyle.Left;
			pnl.Name = "pnl";
			pnl.Border = new Stimulsoft.Base.Drawing.StiBorder(Stimulsoft.Base.Drawing.StiBorderSides.All, System.Drawing.Color.Black, 1, Stimulsoft.Base.Drawing.StiPenStyle.Solid, false, 4, new 						Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Black), false);
			pnl.Brush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Transparent);
            
			//
			// Сам текст
			//			
			StiText txt = new StiText();
			txt.ClientRectangle = new Stimulsoft.Base.Drawing.RectangleD(0.35, 0, 6, 0.4);			
			txt.Name = "txt";
			txt.Type = Stimulsoft.Report.Components.StiSystemTextType.Expression;
			txt.VertAlignment = Stimulsoft.Base.Drawing.StiVertAlignment.Center;
			txt.Border = new Stimulsoft.Base.Drawing.StiBorder(Stimulsoft.Base.Drawing.StiBorderSides.All, System.Drawing.Color.Black, 1, Stimulsoft.Base.Drawing.StiPenStyle.Solid, false, 4, new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Black), false);
			txt.Brush = new Stimulsoft.Base.Drawing.StiEmptyBrush();
			txt.Font = new System.Drawing.Font("Microsoft Sans Serif", 5.75F);
			txt.Indicator = null;
			txt.Interaction = null;
			txt.TextBrush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Black);
			txt.TextOptions = new Stimulsoft.Base.Drawing.StiTextOptions(false, false, false, 0F, System.Drawing.Text.HotkeyPrefix.None, System.Drawing.StringTrimming.None);
			txt.Parent = pnl;			
			
			//Установка текста
			txt.TextValue = CText;
			              
			//
			// Добавление Текста в Панель
			//
			pnl.Components.AddRange(new Stimulsoft.Report.Components.StiComponent[] {
				txt});
			count += 1;
			if(Line == 0)
			{	
				Line += 1;
				StiPanel Block/*В название требуется включить текущее значение Line, для последующего обращения*/ = new StiPanel();
				Block.CanGrow = true;
				Block.ClientRectangle = new Stimulsoft.Base.Drawing.RectangleD(0, 0, 17.6, 0.41);
				Block.DockStyle = Stimulsoft.Report.Components.StiDockStyle.Top;
				Block.Name = "pnl";
				Block.Border = new Stimulsoft.Base.Drawing.StiBorder(Stimulsoft.Base.Drawing.StiBorderSides.All, System.Drawing.Color.Black, 1, Stimulsoft.Base.Drawing.StiPenStyle.Solid, false, 4, new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Black), false);
				Block.Brush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Transparent);
				this.Block/*-//-*/.Components.AddRange(new Stimulsoft.Report.Components.StiComponent[] {
					pnl});				
			}
			if(count <= 2)
			{	
				this.Block/*-//-*/.Components.AddRange(new Stimulsoft.Report.Components.StiComponent[] {
					pnl});				
			}
			else
			{				
				Line += 1;								
				StiPanel Block/*В название требуется включить текущее значение Line, для последующего обращения*/ = new StiPanel();
				Block.CanGrow = true;
				Block.ClientRectangle = new Stimulsoft.Base.Drawing.RectangleD(0, 0, 17.6, 0.41);
				Block.DockStyle = Stimulsoft.Report.Components.StiDockStyle.Top;
				Block.Name = "pnl";
				Block.Border = new Stimulsoft.Base.Drawing.StiBorder(Stimulsoft.Base.Drawing.StiBorderSides.All, System.Drawing.Color.Black, 1, Stimulsoft.Base.Drawing.StiPenStyle.Solid, false, 4, new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Black), false);
				Block.Brush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Transparent);
				this.Block/*-//-*/.Components.AddRange(new Stimulsoft.Report.Components.StiComponent[] {
					pnl});
				count = 0;
			}
			this.DataBand1.Components.AddRange(new Stimulsoft.Report.Components.StiComponent[] {
				Block/*-//-*/});
		}

Re: Динамическое название панели, в зависимости от переменной

Добавлено: 31 окт 2018, 12:39
Aleksey
Здравствуйте,

Уточните где используется данный код.
Если из кода вашего приложения, то вы можете строить и создавать что вам угодно, любой отчет, кроме Кросс-Таблиц.
Пример
https://www.stimulsoft.com/en/samples/w ... in-runtime

Спасибо.

Re: Динамическое название панели, в зависимости от переменной

Добавлено: 01 ноя 2018, 09:34
Vumse
Код используется в Disigner'е, версия: 2013.2.1700 от 19 сентября 2013.
Благодарю

Re: Динамическое название панели, в зависимости от переменной

Добавлено: 05 ноя 2018, 10:06
Aleksey
Здравствуйте,

Вышлите пример отчета, который воспроизводит проблему дляанализа.

Спасибо.

Re: Динамическое название панели, в зависимости от переменной

Добавлено: 08 ноя 2018, 10:47
Vumse
Прошу прощения за задержку.

Re: Динамическое название панели, в зависимости от переменной

Добавлено: 12 ноя 2018, 17:48
Aleksey
Здравствуйте,

Необходимо дополнительное время для анализа проблемы.

Спасибо.