public LayoutViewColumn AddColumn(ColumnInfoNodeWrapper columnInfo) { if (columnsProperties.ContainsValue(columnInfo.PropertyName)) { throw new ArgumentException(string.Format(SystemExceptionLocalizer.GetExceptionMessage(ExceptionId.GridColumnExists), columnInfo.PropertyName), "ColumnInfo"); } ColumnInfoNodeWrapper frameColumn = Model.Columns.FindColumnInfo(columnInfo.PropertyName); if (frameColumn == null) { Model.Columns.Node.AddChildNode(columnInfo.Node); } LayoutViewColumn column = new LayoutViewColumn(); columnsProperties.Add(column, columnInfo.PropertyName); LayoutView.Columns.Add(column); CustomCreateColumnEventArgs customArgs = new CustomCreateColumnEventArgs(column, columnInfo, repositoryFactory); OnCustomCreateColumn(customArgs); if (!customArgs.Handled) { IMemberInfo memberDescriptor = XafTypesInfo.Instance.FindTypeInfo(ObjectType).FindMember(columnInfo.PropertyName); if (memberDescriptor != null) { column.FieldName = memberDescriptor.BindingName; if (memberDescriptor.MemberType.IsEnum) { column.SortMode = ColumnSortMode.Value; } else if (!SimpleTypes.IsSimpleType(memberDescriptor.MemberType)) { column.SortMode = ColumnSortMode.DisplayText; } if (SimpleTypes.IsClass(memberDescriptor.MemberType)) { column.FilterMode = ColumnFilterMode.DisplayText; } else { column.FilterMode = ColumnFilterMode.Value; } } else { column.FieldName = columnInfo.PropertyName; } RefreshColumn(columnInfo, column); if (memberDescriptor != null) { if (repositoryFactory != null) { RepositoryItem repositoryItem = repositoryFactory.CreateRepositoryItem(false, new DetailViewItemInfoNodeWrapper(columnInfo.Node), ObjectType); if (repositoryItem != null) { grid.RepositoryItems.Add(repositoryItem); column.ColumnEdit = repositoryItem; column.OptionsColumn.AllowEdit = IsDataShownOnDropDownWindow(repositoryItem) ? true : editMode != EditMode.ReadOnly; repositoryItem.ReadOnly |= editMode != EditMode.Editable; if ((repositoryItem is ILookupEditRepositoryItem) && ((ILookupEditRepositoryItem)repositoryItem).IsFilterByValueSupported) { column.FilterMode = ColumnFilterMode.Value; } } } if ((column.ColumnEdit == null) && !typeof(IList).IsAssignableFrom(memberDescriptor.MemberType)) { column.OptionsColumn.AllowEdit = false; column.FieldName = GetDisplayablePropertyName(columnInfo.PropertyName); } } } OnColumnCreated(column, columnInfo); return column; }
protected virtual void OnCustomCreateColumn(CustomCreateColumnEventArgs args) { if (CustomCreateColumn != null) { CustomCreateColumn(this, args); } }