private DialogSourceViewModel CreateDialogModel(ActivityContext context, ValueDataField property) { var model = new DialogSourceViewModel { PanelCaption = "Введите значение", FontSize = FontSize.Get(context), IsMenuVisible = false, }; // добавим параметр property.SetFocus = true; model.Fields.Add(property); var footerMenu = new List <ValueDataField>(); var footerMenuItem = new ValueDataField { Name = "Menu0", Caption = "Назад", Value = "Escape" }; footerMenuItem.Set(ValueDataFieldConstants.Row, 0); footerMenuItem.Set(ValueDataFieldConstants.Column, 0); footerMenu.Add(footerMenuItem); footerMenuItem = new ValueDataField { Name = "Menu1", Caption = "Далее", Value = "Enter" }; footerMenuItem.Set(ValueDataFieldConstants.Row, 0); footerMenuItem.Set(ValueDataFieldConstants.Column, 1); footerMenu.Add(footerMenuItem); var footerMenufield = new ValueDataField { Name = ValueDataFieldConstants.FooterMenu, Caption = ValueDataFieldConstants.FooterMenu, FieldType = typeof(FooterMenu), IsEnabled = true }; footerMenufield.Set(ValueDataFieldConstants.FooterMenu, footerMenu.ToArray()); model.Fields.Add(footerMenufield); model.UpdateSource(); return(model); }
private DialogSourceViewModel CreateDialogModel(ValueDataField[] footerMenu) { var result = new DialogSourceViewModel { PanelCaption = "Активные манданты", FontSize = FontSize.Get(_context), IsMenuVisible = true, }; var field = new ValueDataField { Name = FieldName, FieldType = typeof(User2Mandant), Caption = string.Empty, LabelPosition = "Left", IsEnabled = true, SetFocus = true, CloseDialog = true }; field.Set(ValueDataFieldConstants.LookupType, RclLookupType.SelectGridControl.ToString()); field.Set(ValueDataFieldConstants.ShowTotalRow, false); field.Set(ValueDataFieldConstants.ShowControlMenu, false); field.Set(ValueDataFieldConstants.AllowAutoShowAutoFilterRow, true); field.Set(ValueDataFieldConstants.ShowAutoFilterRow, false); field.Set(ValueDataFieldConstants.DoNotActionOnEnterKey, true); //Получаем поля для грида var names = new[] { User2Mandant.User2MandantIsActivePropertyName, User2Mandant.MandantCodePropertyName, User2Mandant.MandantNamePropertyName, User2Mandant.MandantIDPropertyName }; var fieldList = names.Select(propertyName => DataFieldHelper.Instance.GetDataFields(typeof(User2Mandant), SettingDisplay.List).ToList().FirstOrDefault(p => p.Name.EqIgnoreCase(propertyName))) .Where(f => f != null) .ToArray(); fieldList[0].Set(ValueDataFieldConstants.ColumnWidth, "60"); fieldList[1].Set(ValueDataFieldConstants.ColumnWidth, "100"); fieldList[2].Set(ValueDataFieldConstants.ColumnWidth, "250"); field.Set(ValueDataFieldConstants.Fields, fieldList); field.Set(ValueDataFieldConstants.ItemsSource, _user2MandantList); if (footerMenu != null) { field.Set(ValueDataFieldConstants.FooterMenu, footerMenu); } field.FieldName = field.Name; field.SourceName = field.Name; result.Fields.Add(field); result.UpdateSource(); return(result); }
private DialogSourceViewModel GetMainModel(NativeActivityContext context, ValueDataField property) { var model = new DialogSourceViewModel { PanelCaption = "Введите значение", FontSize = FontSize.Get(context), IsMenuVisible = false, }; // добавим параметр property.SetFocus = true; model.Fields.Add(property); var footerMenuItem = new ValueDataField { Name = "footerMenu", FieldType = typeof(IFooterMenu), Visible = true, IsEnabled = true }; footerMenuItem.FieldName = footerMenuItem.Name; footerMenuItem.SourceName = footerMenuItem.Name; model.Fields.Add(footerMenuItem); var nextBtn = new ValueDataField { Name = "F1", Caption = "Далее", FieldType = typeof(Button), }; nextBtn.FieldName = nextBtn.Name; nextBtn.SourceName = nextBtn.Name; nextBtn.Value = nextBtn.Name; nextBtn.Set(ValueDataFieldConstants.Row, 0); nextBtn.Set(ValueDataFieldConstants.Column, 1); footerMenuItem.Set(ValueDataFieldConstants.FooterMenu, new[] { nextBtn }); model.UpdateSource(); return(model); }
private DialogSourceViewModel GetMainModel(NativeActivityContext context, ValueDataField property, bool canMovePrev = true) { var model = new DialogSourceViewModel { PanelCaption = PanelCaption.Get(context), FontSize = FontSize.Get(context), IsMenuVisible = false, }; // добавим параметр property.SetFocus = true; model.Fields.Add(property); var footerMenuItem = new ValueDataField { Name = "footerMenu", FieldType = typeof(IFooterMenu), Visible = true, IsEnabled = true }; footerMenuItem.FieldName = footerMenuItem.Name; footerMenuItem.SourceName = footerMenuItem.Name; model.Fields.Add(footerMenuItem); var footerMenu = new List <ValueDataField>(); if (canMovePrev) { var prevBtn = new ValueDataField { Name = "F2", Caption = "Назад", FieldType = typeof(Button) }; prevBtn.FieldName = prevBtn.Name; prevBtn.SourceName = prevBtn.Name; prevBtn.Value = prevBtn.Name; footerMenu.Add(prevBtn); } var nextBtn = new ValueDataField { Name = "F1", Caption = "Далее", FieldType = typeof(Button) }; nextBtn.FieldName = nextBtn.Name; nextBtn.SourceName = nextBtn.Name; nextBtn.Value = nextBtn.Name; footerMenu.Add(nextBtn); footerMenuItem.Set(ValueDataFieldConstants.FooterMenu, footerMenu.ToArray()); model.UpdateSource(); return(model); }
private DialogSourceViewModel GetMainModel(List <Product> prdList) { if (_mainModel == null) { _mainModel = new DialogSourceViewModel { PanelCaption = "Выбор товара", IsMenuVisible = false, FontSize = 15 }; var prdLst = new ValueDataField { Name = ProductListModelPropertyName, Caption = string.Empty, FieldType = typeof(Product), LabelPosition = "None", IsEnabled = true, SetFocus = true, CloseDialog = true }; prdLst.Set(ValueDataFieldConstants.LookupType, RclLookupType.SelectGridControl.ToString()); prdLst.Set(ValueDataFieldConstants.ShowControlMenu, true); prdLst.Set(ValueDataFieldConstants.AllowAutoShowAutoFilterRow, false); prdLst.Set(ValueDataFieldConstants.ShowAutoFilterRow, false); prdLst.Set(ValueDataFieldConstants.DoNotActionOnEnterKey, false); prdLst.Set(ValueDataFieldConstants.ItemsSource, prdList); prdLst.Set(ValueDataFieldConstants.CloseDialogOnSelectedItemChanged, true); var grdFields = GetGridFields(prdLst.FieldType, DisplaySetting); prdLst.Set(ValueDataFieldConstants.Fields, grdFields.ToArray()); _mainModel.Fields.Add(prdLst); } else { _mainModel.GetField(ProductListModelPropertyName).Set(ValueDataFieldConstants.ItemsSource, prdList); } _mainModel.UpdateSource(); return(_mainModel); }
private DialogSourceViewModel GetMainModel(List <MutableTuple <Int32, PL, TE> > activePlList) { if (_mainModel == null) { _mainModel = new DialogSourceViewModel { PanelCaption = "Списки пикинга", IsMenuVisible = false, FontSize = 15 }; var plLst = new ValueDataField { Name = PlListPropertyName, Caption = string.Empty, FieldType = typeof(MutableTuple <Int32, PL, TE>), LabelPosition = "Left", IsEnabled = true, SetFocus = true, CloseDialog = true }; plLst.Set(ValueDataFieldConstants.LookupType, RclLookupType.SelectGridControl.ToString()); plLst.Set(ValueDataFieldConstants.ShowControlMenu, true); plLst.Set(ValueDataFieldConstants.AllowAutoShowAutoFilterRow, false); plLst.Set(ValueDataFieldConstants.ShowAutoFilterRow, false); plLst.Set(ValueDataFieldConstants.DoNotActionOnEnterKey, false); plLst.Set(ValueDataFieldConstants.ItemsSource, activePlList); plLst.Set(ValueDataFieldConstants.CloseDialogOnSelectedItemChanged, true); var grdFields = GetGridFields(plLst.FieldType, DisplaySetting); plLst.Set(ValueDataFieldConstants.Fields, grdFields.ToArray()); _mainModel.Fields.Add(plLst); } else { _mainModel.GetField(PlListPropertyName).Set(ValueDataFieldConstants.ItemsSource, activePlList); } _mainModel.UpdateSource(); return(_mainModel); }
private ValueDataField[] CreateDialogFooterMenu() { var footerMenu = new List <ValueDataField>(); var footerMenuItem = new ValueDataField { Name = "Menu0", Caption = "Задать", Value = "F1" }; footerMenuItem.Set(ValueDataFieldConstants.Row, 0); footerMenuItem.Set(ValueDataFieldConstants.Column, 0); footerMenuItem.Set(ValueDataFieldConstants.IsNotMenuButton, true); footerMenu.Add(footerMenuItem); footerMenuItem = new ValueDataField { Name = "Menu1", Caption = "Изменить", Value = "F2" }; footerMenuItem.Set(ValueDataFieldConstants.Row, 0); footerMenuItem.Set(ValueDataFieldConstants.Column, 1); footerMenuItem.Set(ValueDataFieldConstants.IsNotMenuButton, true); footerMenu.Add(footerMenuItem); footerMenuItem = new ValueDataField { Name = "Menu2", Caption = "Снять все", Value = "F3" }; footerMenuItem.Set(ValueDataFieldConstants.Row, 1); footerMenuItem.Set(ValueDataFieldConstants.Column, 0); footerMenuItem.Set(ValueDataFieldConstants.IsNotMenuButton, true); footerMenu.Add(footerMenuItem); footerMenuItem = new ValueDataField { Name = "Menu3", Caption = "Выбрать все", Value = "F4" }; footerMenuItem.Set(ValueDataFieldConstants.Row, 1); footerMenuItem.Set(ValueDataFieldConstants.Column, 1); footerMenu.Add(footerMenuItem); footerMenuItem = new ValueDataField { Name = "Menu4", Caption = "Фильтр", Value = "F5" }; footerMenuItem.Set(ValueDataFieldConstants.Row, 2); footerMenuItem.Set(ValueDataFieldConstants.Column, 0); footerMenu.Add(footerMenuItem); footerMenuItem = new ValueDataField { Name = "Menu5", Caption = "Применить", Value = "Enter" }; footerMenuItem.Set(ValueDataFieldConstants.Row, 2); footerMenuItem.Set(ValueDataFieldConstants.Column, 1); footerMenu.Add(footerMenuItem); return(footerMenu.ToArray()); }
protected override void Execute(NativeActivityContext context) { var entity = Entity.Get(context); var obj = entity as WMSBusinessObject; if (obj == null) { throw new NotImplementedException(string.Format("Тип '{0}' не поддерживается", entity.GetType())); } // получим параметры MUST_SET var mustSetList = GetMustSetProperies(context).ToArray(); var objFields = DataFieldHelper.Instance.GetDataFields(typeof(T), wmsMLC.General.PL.SettingDisplay.Detail); var history = HistoryPropertyValue.Get(context); // проход по каждому параметру вперед и назад foreach (var m in mustSetList) { // если у параметра есть значение, то оно может быть по умолчанию var defaultValue = obj.GetPropertyDefaultValue(m.PmConfig.ObjectName_r); if (obj.GetProperty(m.PmConfig.ObjectName_r) == null || defaultValue != null || m.Show) { var datafield = objFields.FirstOrDefault(i => i.Name.EqIgnoreCase(m.PmConfig.ObjectName_r)); if (datafield == null) { throw new DeveloperException("Ошибка в настройках {1} менеджера товара. Задан неизвестный параметр '{0}'.", m.PmConfig.ObjectName_r, m.PmConfig.MethodCode_r); } var field = new ValueDataField(datafield) { LabelPosition = "Top" }; if (defaultValue != null) { field.Value = defaultValue; } if (m.Show) { field.Value = obj.GetProperty(m.PmConfig.ObjectName_r); } //Массовый ввод if (m.Set && m.PmConfig.PMCONFIGINPUTMASS == true && history != null && history.ContainsKey(field.Name)) { field.Value = history[field.Name]; } if (string.IsNullOrEmpty(field.LookupCode)) { field.CloseDialog = true; } else //Если поле лукап { field.LabelPosition = "None"; field.Set(ValueDataFieldConstants.LookupType, RclLookupType.SelectControl.ToString()); field.Set(ValueDataFieldConstants.MaxRowsOnPage, MaxRowsOnPage.Get(context)); } var model = GetMainModel(context, field); if (m.Show) { model.PanelCaption = model.PanelCaption + " [Опционально]"; } while (true) // делаем это для возврата на форму { var show = ShowDialog(model); if (!show && m.Set) { throw new OperationException("Не были указаны обязательные параметры."); } if (!show && m.Show) { break; } var errorMessage = new StringBuilder(); switch (string.Format("1{0}", model.MenuResult)) { case "1": case "1F1": var value = model[field.Name]; if (value == null && m.Set) { errorMessage.AppendLine(string.Format("Не заполнено обязательное поле '{0}'.", field.Caption)); } else { //Дополнительные параметры PMConfig if (m.Set && !string.IsNullOrEmpty(m.PmConfig.PMCONFIGINPUTMASK) && value is string) { var expressions = Regex.Matches((string)value, m.PmConfig.PMCONFIGINPUTMASK, RegexOptions.CultureInvariant | RegexOptions.IgnoreCase); if (expressions.Count > 0) { errorMessage.AppendLine(string.Format("Поле '{0}' не прошло проверку по маске.", field.Caption)); } } if (errorMessage.Length == 0) { obj.SetProperty(field.Name, value); if (history != null) { history[field.Name] = value; } } } break; default: throw new DeveloperException("Неизвестная команда."); } // если были ошибки, то покажем что не так и вернемся на форму if (errorMessage.Length > 0) { var viewService = IoC.Instance.Resolve <IViewService>(); viewService.ShowDialog("Ошибка", errorMessage.ToString(), System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error, System.Windows.MessageBoxResult.OK); } else { break; } } } } Entity.Set(context, obj); if (history != null) { HistoryPropertyValue.Set(context, history); } }
protected override void Execute(NativeActivityContext context) { var entity = Entity.Get(context); var obj = entity as WMSBusinessObject; if (obj == null) { throw new NotImplementedException(string.Format("Тип '{0}' не поддерживается", entity.GetType())); } var objname = SourceNameHelper.Instance.GetSourceName(obj.GetType()); // получим параметры MUST_SET var mustSetList = GetProperties(context); var pmConfigs = mustSetList as IList <PMConfig> ?? mustSetList.ToList(); var mustProperties = pmConfigs.Select(pm => pm.ObjectName_r).Distinct(); var objFields = DataFieldHelper.Instance.GetDataFields(typeof(T), wmsMLC.General.PL.SettingDisplay.Detail); // проход по каждому параметру вперед и назад foreach (var attrName in mustProperties) { var methods = pmConfigs.Where(pm => pm.ObjectName_r == attrName).Select(pm => pm.MethodCode_r).Distinct().ToList(); var setNull = methods.Exists(m => m == "SET_NULL"); var mustSet = methods.Exists(m => m == "MUST_SET"); var mustCorrect = methods.Exists(m => m == "MUST_MANUAL_CORRECT"); if (!setNull && !mustSet && !mustCorrect) { continue; } var attrValue = obj.GetProperty(attrName); var defaultValue = obj.GetPropertyDefaultValue(attrName); var datafield = objFields.FirstOrDefault(i => i.Name.EqIgnoreCase(attrName)); if (datafield == null) { throw new DeveloperException("Ошибка в настройках менеджера товара. Задан неизвестный параметр '{0}.{1}'.", objname, attrName); } var field = new ValueDataField(datafield) { LabelPosition = "Top" }; // если у параметра есть значение по-умолчанию и оно совпадает с реальным, то необходимо подтверждение ввода if (!mustCorrect && !setNull && attrValue != null && !Equals(attrValue, defaultValue)) { continue; } // параметры атрибута field.Value = setNull ? null : (attrValue == null && defaultValue != null) ? defaultValue : attrValue; field.IsRequired = mustSet; if (string.IsNullOrEmpty(field.LookupCode)) { field.CloseDialog = true; } else //Если поле лукап { field.Set(ValueDataFieldConstants.LookupType, RclLookupType.SelectControl.ToString()); field.Set(ValueDataFieldConstants.MaxRowsOnPage, MaxRowsOnPage.Get(context)); } // *-* // var model = GetMainModel(context, field); var showKey = ShowKey.Get(context); while (true) // делаем это для возврата на форму { if (showKey) { model.PanelCaption = string.Format("Введите значение ('{0}')", obj.GetKey()); } if (!ShowDialog(model)) { throw new OperationException("Не были указаны обязательные параметры."); } var errorMessage = new StringBuilder(); switch (string.Format("1{0}", model.MenuResult)) { case "1": case "1F1": var value = model[field.Name]; if (value == null && field.IsRequired) { errorMessage.AppendLine(string.Format("Не заполнено обязательное поле '{0}'.", field.Caption)); } else { obj.SetProperty(field.Name, value); } break; default: throw new DeveloperException("Неизвестная команда."); } // если были ошибки, то покажем что не так и вернемся на форму if (errorMessage.Length > 0) { var viewService = IoC.Instance.Resolve <IViewService>(); viewService.ShowDialog("Ошибка", errorMessage.ToString(), System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error, System.Windows.MessageBoxResult.OK); } else { break; } } } Entity.Set(context, obj); }
protected override void Execute(NativeActivityContext context) { const string isnullerrorformat = "Свойство '{0}' должно быть задано."; var entities = Entities.Get(context); if (entities == null) { throw new DeveloperException(isnullerrorformat, EntitiesDisplayName); } var artcodepropertyname = ArtCodePropertyName.Get(context); if (string.IsNullOrEmpty(artcodepropertyname)) { throw new DeveloperException(isnullerrorformat, ArtCodePropertyNameDisplayName); } var operationCode = OperationCode.Get(context); if (string.IsNullOrEmpty(operationCode)) { throw new DeveloperException(isnullerrorformat, OperationCodeDisplayName); } var boEntities = entities.OfType <WMSBusinessObject>().ToArray(); //Получаем список артикулов из Entities var arts = boEntities.Select(p => p.GetProperty <string>(artcodepropertyname)).Distinct().ToArray(); var result = boEntities.ToArray(); var objFields = DataFieldHelper.Instance.GetDataFields(typeof(T), SettingDisplay.Detail); foreach (var artcode in arts) { var propList = GetPmMethodProperies(artcode, operationCode, context); var boEntity = result.FirstOrDefault(p => p.GetProperty <string>(artcodepropertyname) == artcode); if (boEntity == null) { continue; } foreach (var method in propList.Keys) { foreach (var property in propList[method]) { var compareValues = result.Select(p => p.GetProperty(property)).Distinct().ToArray(); if (compareValues.Length <= 1) { continue; //Пропускаем } var datafield = objFields.FirstOrDefault(i => i.Name.EqIgnoreCase(property)); if (datafield == null) { throw new DeveloperException( "Ошибка в настройках '{0}' PM. Задан неизвестный параметр '{1}'.", method, property); } var field = new ValueDataField(datafield) { LabelPosition = "Top" }; if (method == PMMethods.MUST_COMPARE_VISIBLE) { field.Value = boEntity.GetProperty(property); } if (string.IsNullOrEmpty(field.LookupCode)) { field.CloseDialog = true; } else //Если поле лукап { field.LabelPosition = "None"; field.Set(ValueDataFieldConstants.LookupType, RclLookupType.SelectControl.ToString()); field.Set(ValueDataFieldConstants.MaxRowsOnPage, MaxRowsOnPage.Get(context)); } var model = CreateDialogModel(context, field); while (true) // делаем это для возврата на форму { if (!ShowDialog(model)) { throw new OperationException("Значения полей не были указаны."); } var errorMessage = new StringBuilder(); switch (string.Format("1{0}", model.MenuResult)) { case "1": case "1Return": var value = model[field.Name]; if (!compareValues.Any(p => Equals(value, p))) { errorMessage.AppendLine(string.Format("Неверное значение поля '{0}'.", field.Caption)); } else { result = result.Where(p => Equals(value, p.GetProperty(property))).ToArray(); } break; default: throw new DeveloperException("Неизвестная команда."); } // если были ошибки, то покажем что не так и вернемся на форму if (errorMessage.Length > 0) { var viewService = IoC.Instance.Resolve <IViewService>(); viewService.ShowDialog("Ошибка", errorMessage.ToString(), MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK); } else { break; } } } } } Result.Set(context, result.OfType <T>().ToArray()); }
protected override void Execute(NativeActivityContext context) { var entity = Entity.Get(context); var obj = entity as WMSBusinessObject; if (obj == null) { throw new NotImplementedException(string.Format("Тип '{0}' не поддерживается", entity.GetType())); } var pos = 0; // получим параметры MUST_SET var manualCorrectList = GetManualCorrectProperies(context).ToArray(); var objFields = DataFieldHelper.Instance.GetDataFields(typeof(T), wmsMLC.General.PL.SettingDisplay.Detail); for (; pos < manualCorrectList.Length;) { var m = manualCorrectList[pos]; var datafield = objFields.FirstOrDefault(i => i.Name.EqIgnoreCase(m.ObjectName_r)); if (datafield == null) { throw new DeveloperException("Ошибка в настройках CAN_PRODUCT_MANUAL_CORRECT менеджера товара. Задан неизвестный параметр '{0}'.", m.ObjectName_r); } var vfield = new ValueDataField(datafield) { LabelPosition = "Top", Value = obj.GetProperty(datafield.SourceName) }; //Если поле лукап if (!string.IsNullOrEmpty(vfield.LookupCode)) { vfield.Set(ValueDataFieldConstants.LookupType, RclLookupType.SelectControl.ToString()); vfield.Set(ValueDataFieldConstants.MaxRowsOnPage, MaxRowsOnPage.Get(context)); } var model = GetMainModel(context, vfield, pos != 0); while (true) { if (ShowDialog(model) == false) { return; } var value = model[vfield.Name]; obj.SetProperty(vfield.SourceName, value); switch (model.MenuResult) { case "F1": pos++; break; case "F2": pos--; break; } break; } } Entity.Set(context, obj); }
private DialogSourceViewModel GetTimerFormModel() { var result = new DialogSourceViewModel { PanelCaption = DialogTitle.Get(_context), FontSize = FontSize.Get(_context), IsMenuVisible = false, }; var footerMenu = new List <ValueDataField>(); var menuNext = new ValueDataField { Name = "Menu0", Caption = "Далее", Value = Key.Enter.ToString() }; menuNext.Set(ValueDataFieldConstants.Row, 0); menuNext.Set(ValueDataFieldConstants.Column, 1); footerMenu.Add(menuNext); ValueDataField field; var message = Message.Get(_context); if (!string.IsNullOrEmpty(message)) { field = new ValueDataField { Name = "txtMessage", FieldType = typeof(string), LabelPosition = "None", IsEnabled = false, Value = message }; field.FieldName = field.Name; field.SourceName = field.Name; result.Fields.Add(field); } var dateFrom = DateFrom.Get(_context); if (dateFrom.HasValue) { field = new ValueDataField { Name = "dtDateFrom", Caption = "С", FieldType = typeof(DateTime), LabelPosition = "Left", Value = dateFrom.Value, DisplayFormat = DefaultDateTimeFormat, IsEnabled = false, SetFocus = false, CloseDialog = false }; field.FieldName = field.Name; field.SourceName = field.Name; result.Fields.Add(field); } var timevalue = TimeSpan.FromSeconds(dateFrom.HasValue ? (DateTime.Now - dateFrom.Value).TotalSeconds - TimerOffset.Get(_context) : 0); field = new ValueDataField { Name = TimerFieldName, Caption = "Таймер", FieldType = typeof(TimeSpan), LabelPosition = "Left", DisplayFormat = "hh\\:mm\\:ss", Value = timevalue, IsEnabled = false, SetFocus = false, CloseDialog = false }; field.FieldName = field.Name; field.SourceName = field.Name; result.Fields.Add(field); var fieldFooterMenu = new ValueDataField { Name = "footerMenu", FieldType = typeof(IFooterMenu) }; fieldFooterMenu.FieldName = fieldFooterMenu.Name; fieldFooterMenu.SourceName = fieldFooterMenu.Name; fieldFooterMenu.Properties["FooterMenu"] = footerMenu.ToArray(); result.Fields.Add(fieldFooterMenu); result.UpdateSource(); return(result); }