Многострочный текст в Label

Добрый день, уважаемые гуру BPM!

Возникло затруднение - на Label в некотором окне нужно вывести заранее сформированный текст типа списка, само собой определенным образом разбитый на строчки. Подскажите, как бы это сделать?

Попытка добавить "\r\n" не помогла;
System.Environment.NewLine не помогает;
"\n" не помогает.

Как вариант буду рад совету как реализовать перенос строк в MemoEdit...

Нравится

13 комментариев

Здравствуйте.

К сожалению свойства WordWrap для UI элемента Label не предусмотрено, в результате поместить многострочный текст в этот компонент невозможно.

Для MemoEdit же, если для компонента установлено свойство WordWrap, служебные символы перевода строки работают:

Page.MemoEdit1.Value = "this \r\n is \r\n multiline \r\n text. "; 

С лэйблом грустно... :sad:

Пробую MemoEdit.
Поле помещаю в окно, окно поднимаю с помощью действия процесса "Открыть страницу".
Назначаем параметры перед вызовом окна:

var MessageText = "this \r\n is \r\n multiline \r\n text. ";
UserTask1.PageUId = new Guid("{c527453b-2c64-40dc-bd4d-48b43be79c54}");
var TaskPageParameters = new Dictionary<string,string>();
TaskPageParameters.Add("MessageText", MessageText);
UserTask1.PageParameters = TaskPageParameters;

На окне в PageLoadComplete для MemoEdit.Value назначаю значение параметра

string queryString = Page.Request.QueryString.ToString();
if (queryString.Contains("MessageText")) {
	Page.MessageEdit.Value = Page.Request.QueryString["MessageText"].ToString();
}

С таким текстом в MessageText окно не поднимается вообще... понятно почему - не проходит в QueryString символы \r\n

Соответственно переформулируем проблему - можно ли как то для поднимаемого действием окна все это передать другим способом?
Дежурный вариант - вместо разрывов строк ставить символы и уже на окне парсить и разбивать на строки, помещать в мемо. Может быть есть метод поизящнее?

Александр, а если попробовать так?

var MessageText = @"this \r\n is \r\n multiline \r\n text. ";

Александр, попробуйте

HttpUtility.UrlEncode(MessageText)

"Олейник Дмитрий" написал:

Александр, а если попробовать так?

var MessageText = @"this \r\n is \r\n multiline \r\n text. ";


Получилось, спасибо!

"Раловец Ольга" написал:

Александр, попробуйте

HttpUtility.UrlEncode(MessageText)


Выдает "The name HttpUtility doesnt exist in the current context"

Чтобы два раза не вставать:smile: спрошу в этой же теме у гуру BPM

Есть строка со списком Id (разделенных точкой с запятой, например)

string selectedIds = "deb710e4-f36b-1410-e886-00155d010cbf;7eb620fa-f36b-1410-ea86-00155d010cbf";

Нужно в запрос вида

var SomeSelect = new Select(Page.UserConnection)
	.Column("SomeTable", "SomeField")
	.From("SomeTable")
	.Where("SomeTable", "Id").IsEqual(Column.Parameter(selectedIdsParameter))
	as Select;

подставить этот набор значений Id в selectedIdsParameter... туда же не просто строка selectedIds должна передаваться? И уместен ли здесь IsEqual?

"Александр Кудряшов" написал:Выдает "The name HttpUtility doesnt exist in the current context"

using System.Web.
Это еще может пригодиться особенно, если захотите в QueryString какой-то ReturnUrl поместить.

"Александр Кудряшов" написал:Нужно в запрос вида
var SomeSelect = new Select(Page.UserConnection)
        .Column("SomeTable", "SomeField")
        .From("SomeTable")
        .Where("SomeTable", "Id").IsEqual(Column.Parameter(selectedIdsParameter))
        as Select;
подставить этот набор значений Id в selectedIdsParameter... туда же не просто строка selectedIds должна передаваться? И уместен ли здесь IsEqual?

вместо IsEqual подойдет In(), в который можно передавать массив Column.Parameter

 .Where("SomeTable", "Id").In(Column.Parameter(selectedIds))

такой вариант не вызывает ругательств при компиляции, но фильтруется только по первому Id из списка (как будто IsEqual)

Вы в In передали один экземпляр Column.Parameter, в который передали массив значений, а нужно в In передать массив Column.Parameter, в каждый из которых передать по одному значению из selectedIds

Сломал мозг, пытаясь передать массив из Column.Parameter:cry:

QueryColumnExpression[] ArrayParam = new QueryColumnExpression[selectedNodes.Count];
for(int i = 0; i< selectedNodes.Count; i++){
    ArrayParam[ i ] = Column.Parameter(selectedNodes[i].Values["Id"].ToString());
}

[update] заработало! Именно таким образом, ошибка была у меня в другом куске кода. В фильтр In успешно передается массив параметров.

Для In нашла только один пример, через константы.

var select = new Select(userConnection)
				.Column("Name")
				.From("Country")
				.Where("Name").In(Column.Const("TestValue1"), Column.Const("TestValue2"));

может не в тему, можно как-то вставить подзапрос в колонку, вернее как подзапрос вставить понятно, а вот как использовать колонку основного запроса в виде параметра непонятно

Select headContactSelect = new Select(UserConnection)
                        .Column("DivisionGroups", "Id")
			.Column(new Select(UserConnection).Top(1)
							.Column("AUC", "ContactId")
						.From("SysUserInRole").As("UIR")
						.InnerJoin("SysAdminUnit").As("AUC")
							.On("AUC", "Id").IsEqual("UIR", "SysUserId")
						.Where("UIR", "SysRoleId").IsEqual('<<Column>>'))
				.As("HeadContactId")
		.From(hDivisionsExpression).As("DivisionGroups")
		.Where("DivisionGroups", "SysAdminUnitTypeValue").IsEqual(Column.Parameter(2))
			.And("DivisionGroups", "Level").IsEqual(Column.Parameter(2)) as Select;

Хочу вместо этого '<>' использовать Column("DivisionGroups", "Id")?

Александр, посмотрите здесь, может найдете решение Вашей задачи.

Показать все комментарии