Как написать на С#

Добрый день. Помогите написать на языке С# следующую логику:

Если поле SupportLineEdit равно e6b732b6-f36b-1410-a994-00155d054c04 , то поле DepartamentEdit должно быть равно также e6b732b6-f36b-1410-a994-00155d054c04

Если поле SupportLineEdit равно a8d971a0-a7b1-4001-9312-4707391f8e77, то в фильтре поля DepartamentEdit не должны быть задействованы e6b732b6-f36b-1410-a994-00155d054c04 и feaf10a0-f36b-1410-a994-00155d054c04

Заранее спасибо

Нравится

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

Добрый день, Татьяна!
1. Создаете обработчик события изменения поля SupportLineEdit, в котором реализуете следующее:

var supLine = SupportLineEdit.Text;
var supLineId = new Guid(SupportLineEdit.Value);
if (supLineId == new Guid("e6b732b6-f36b-1410-a994-00155d054c04")) {
	DepartamentEdit.SetValueAndText(supLineId, supLine);
}
return true;

2. На событии Init необходимо реализовать наложение фильтров на поле с помощью PrepareLookupFilter. Аналогичный пример:

Page.RegionEdit.PrepareLookupFilter += delegate (object sender, LookupEditEventArgs e) {
        object value = Page.CountryEdit.Value;
        Guid countryId = (value == null || value.ToString().Equals(string.Empty)) ? Guid.Empty : Guid.Parse(value.ToString());
        if (countryId == Guid.Empty) {  
                return;
        }
        var filters = e.Filters;
        filters.Add(new Dictionary<string, object> { 
                   {"comparisonType", FilterComparisonType.Equal}, 
                   {"leftExpressionColumnPath", "Country.Id"}, 
                   {"useDisplayValue", false}, 
                   {"rightExpressionParameterValues", new object[] {countryId.ToString()}}});                                                          
};

здесь вместо new object[] {countryId.ToString()}
Вы можете положить несколько Id:
new object[] {"e6b732b6-f36b-1410-a994-00155d054c04", "feaf10a0-f36b-1410-a994-00155d054c04"}

По п.1 - не получилось, т.к. выдало ошибку, что SupportLineEdit и DepartamentEdit не найдены.
При этом в обработчике события изменения поля SupportLineEdit установила: Page.DepartamentEdit.Clear(); - здесь ошибок не выдало.

Татьяна, я немного ошибся. Нужно добавить "Page." перед названиями контролов.

var supLine = Page.SupportLineEdit.Text;
var supLineId = new Guid(SupportLineEdit.Value);
if (supLineId == new Guid("e6b732b6-f36b-1410-a994-00155d054c04")) {
        Page.DepartamentEdit.SetValueAndText(supLineId, supLine);
}
return true;

Андрей, пишу так:
var supLine = Page.SupportLevelEdit.Text;
var supLineId = new Guid(SupportLevelEdit.Value);
if (supLineId == new Guid("e6b732b6-f36b-1410-a994-00155d054c04")) {
Page.DepartmentEdit.SetValueAndText(supLineId, supLine);
}

return true;

Система выдает ошибку, что имя SupportLevelEdit не найдено.

пишу во второй строчке:
var supLineId = new Guid(Page.SupportLevelEdit.Value);

тогда система выдает ошибку - см скриншот

Татьяна, понял. Попробуйте так:

	var supLineValue = Page.SupportLineEdit.Value.ToString();
	var supLineId = Guid.Empty;
	if (supLineValue != string.Empty) {
		supLineId = new Guid(supLineValue);
	}

А где здесь связь с DepartmentEdit ?

Татьяна, этот кусок кода нужно использовать вместо

var supLineId = new Guid(Page.SupportLevelEdit.Value);

Андрей, я написала в обработчике события изменения поля SupportLevelEdit:

var supLine = Page.SupportLevelEdit.Text;

var supLineValue = Page.SupportLevelEdit.Value.ToString();
var supLineId = Guid.Empty;
if (supLineValue != string.Empty) {
supLineId = new Guid(value);
}

if (supLineId == new Guid("e6b732b6-f36b-1410-a994-00155d054c04")) {
Page.DepartmentEdit.SetValueAndText(supLineId, supLine);
}

return true;

В итоге получила сообщение об ошибке: что value не найден (ошибка в строке supLineId = new Guid(value);)

Татьяна,

var supLine = Page.SupportLevelEdit.Text;

var supLineValue = Page.SupportLevelEdit.Value.ToString();
var supLineId = Guid.Empty;
if (supLineValue != string.Empty) {
supLineId = new Guid(supLineValue);
}

if (supLineId == new Guid("e6b732b6-f36b-1410-a994-00155d054c04")) {
Page.DepartmentEdit.SetValueAndText(supLineId, supLine);
}

return true;

Добрый день
п.1 - опубликовало без ошибок
Но при выборе в карточке Задачи определенного SupportLevelEdit - поле DepartmentEdi автоматически не заполнилось. Подскажите, что не так?

Данная реализация приемлема в том случае, когда справочники полей
SupportLineEdit и DepartamentEdit ссылаются на один объект.

1. На событии изменения поля SupportLineEdit, в карточке, реализовать код:

var id = new Guid(Page.SupportLineEdit.Value.ToString());
If(id == new Guid(“e6b732b6-f36b-1410-a994-00155d054c04”)) {
Page.DepartamentEdit.SetValueAndText(id, Page.SupportLineEdit.Text);
}

2. На Init Страницы реализовать код:

Page.DepartamentEdit.PrepareLookupFilter += delegate (object sender, EditEventArgs e) {
        Collection<Dictionary<string, object>> filters = e.Filters;
var id = new Guid(“Page.SupportLineEdit.Value.ToString());
If(id == new Guid(“a8d971a0-a7b1-4001-9312-4707391f8e77”)) {
        filters.Add(new Dictionary<string, object> {
                       {"comparisonType", FilterComparisonType.Equal},
                       {"leftExpressionColumnPath", "Id"},
                       {"useDisplayValue", false},
                       {"rightExpressionParameterValues", new object[] {new Guid(“e6b732b6-f36b-1410-a994-00155d054c04”), new Guid(“e6b732b6-f36b-1410-a994-00155d054c04”)}}}
);
}
};

Где:
EditEventArgs – LookupEditEventArgs(если поле справочника) или ComboBoxEditEventArgs(если поле со списком)

Добрый день.
Вот в том-то и дело, что эти справочники не ссылаются на обин объект.

Как я писал ранее, что:

"Вильшанский Дмитрий" написал:

Данная реализация приемлема в том случае, когда справочники полей

SupportLineEdit и DepartamentEdit ссылаются на один объект.

Татьяна, у Вас нет возможности сделать, чтобы они ссылались на один объект?

Нет, нет такой возможности.

Татьяна, если SupportLevelEdit и DepartmentEdit ссылаются на разные объекты (таблицы), то едва ли в этих таблицах будут значения с одинаковыми полями Id. Вероятно, Вы ошиблись при указании идентификаторов. Проверьте это, пожалуйста. При текущей реализации у Вас, скорее всего, не выполняется условие:

if (supLineId == new Guid("e6b732b6-f36b-1410-a994-00155d054c04")) 

Попробуйте так:

var supLineValue = Page.SupportLevelEdit.Value.ToString();
var supLineId = Guid.Empty;
if (supLineValue != string.Empty) {
supLineId = new Guid(supLineValue);
}
var activeRow = Page.DataSource.ActiveRow;
var departmentId = new Guid("e6b732b6-f36b-1410-a994-00155d054c04"); //тут Id департамента
string departmentText = "Название департамента";
if (supLineId == new Guid("e6b732b6-f36b-1410-a994-00155d054c04")) { //тут Id линии поддержки, он не равен Id департамента
 
//тут тогда можно так:
Page.DepartmentEdit.SetValueAndText(departmentId , departmentText);
 
//или вот так:
activeRow.SetColumnValue("DepartmentId", departmentId);
activeRow.LoadLookupDisplayValues("Department");
}
return true;

Что касается фильтрации, то пользуясь предоставленным мной в первом комменте примером можно сделать так:

Page.DepartamentEdit.PrepareLookupFilter += delegate (object sender, LookupEditEventArgs e) {
		object value = Page.SupportLineEdit.Value;
		Guid supportLineId = (value == null || value.ToString().Equals(string.Empty)) ? Guid.Empty : Guid.Parse(value.ToString());
		if (supportLineId == new Guid("a8d971a0-a7b1-4001-9312-4707391f8e77")) {  //при выполнении этого условия накладываем фильтры
			var filters = e.Filters;
				filters.Add(new Dictionary<string, object> { 
				   {"comparisonType", FilterComparisonType.NotEqual}, //не равно
				   {"leftExpressionColumnPath", "Id"}, 
				   {"useDisplayValue", false}, 
				   {"rightExpressionParameterValues",
						new object[] {"e6b732b6-f36b-1410-a994-00155d054c04", "feaf10a0-f36b-1410-a994-00155d054c04"}}//значения для сравнения
						}
					); 
		}
};

Опять же, перепроверьте, правильность идентификаторов в БД.

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