Добрый день. Помогите написать на языке С# следующую логику:
Если поле 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
Заранее спасибо
Нравится
Добрый день, Татьяна!
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"}
Татьяна, я немного ошибся. Нужно добавить "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); }
Татьяна, этот кусок кода нужно использовать вместо
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;
Данная реализация приемлема в том случае, когда справочники полей
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"}}//значения для сравнения } ); } };
Опять же, перепроверьте, правильность идентификаторов в БД.