/// <summary> /// Returns <see cref="GridViewEditDataColumn"/> instance based on meta data passed in column argument. /// </summary> /// <param name="column">An instance of <see cref="ColumnMeta"/> containing meta data of column to be created.</param> /// <param name="connectionString">Connection string to underlying database.</param> /// <returns></returns> internal static GridViewEditDataColumn AddGridViewDataColumn(ColumnMeta column, string connectionString) { GridViewEditDataColumn dataColumn = null; // As per 11 Oct 2016, the following evaluation criteria for data type and its column editor are not yet complete. // We still has some works to do to deal with picture and blob/document. (--github.com/ganagus) // --- if ((new TypeCode[] { TypeCode.String, TypeCode.Int64, TypeCode.Int32, TypeCode.Single, TypeCode.Decimal }) .Contains(column.DataType) && !column.IsForeignKey && string.IsNullOrEmpty(column.EnumTypeName)) { // regular text column, editor => text box dataColumn = AddGridViewDataTextColumn(column, dataColumn); } else if (!string.IsNullOrEmpty(column.EnumTypeName)) { // enum data type column, editor => check box dataColumn = AddGridViewEnumColumn(column, dataColumn); } // foreign key should be rendered in combo box column else if (column.IsForeignKey) { // foreign key column, it's a look up to other table, editor => combo box dataColumn = AddGridViewForeignKeyColumn(column, dataColumn, connectionString); } else if (column.DataType == TypeCode.DateTime) { // date / datetime column, editor => DevExpress date editor dataColumn = new GridViewDataDateColumn(); if (column.Name.ToLower() == "createddate" || column.Name.ToLower() == "modifieddate") { //hide createdby, createddate, modifiedby, modifieddate from edit form //dataColumn.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.False; } } else if (column.DataType == TypeCode.Boolean) { // boolean column, editor => check box dataColumn = new GridViewDataCheckColumn(); } else { // other data type, default to text box dataColumn = new GridViewDataTextColumn(); } if (column.IsIdentity) { dataColumn.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.False; } dataColumn.FieldName = column.Name; dataColumn.Caption = column.Caption; dataColumn.VisibleIndex = column.OrderNo; return(dataColumn); }
/// <summary> /// Renders a combo box grid view column representing enumeration values. /// TODO: this code still does not work, need more effort. (github.com/ganagus). /// </summary> /// <param name="column">Meta data about column, an instance of <see cref="ColumnMeta"/>.</param> /// <param name="dataColumn">An instance of <see cref="GridViewEditDataColumn"/>.</param> /// <returns>An instance of <see cref="GridViewDataComboBoxColumn"/>.</returns> private static GridViewEditDataColumn AddGridViewEnumColumn(ColumnMeta column, GridViewEditDataColumn dataColumn) { var enumType = Type.GetType(column.EnumTypeName); if (enumType.IsEnum) { var comboBoxColumn = new GridViewDataComboBoxColumn(); comboBoxColumn.PropertiesComboBox.ValueType = enumType; comboBoxColumn.PropertiesComboBox.DataSource = Enum.GetValues(enumType); dataColumn = comboBoxColumn; } return(dataColumn); }
/// <summary> /// Renders a combo box grid view column, representing data from referenced table. /// </summary> /// <param name="column">Meta data about column, an instance of <see cref="ColumnMeta"/>.</param> /// <param name="dataColumn">An instance of <see cref="GridViewEditDataColumn"/>.</param> /// <param name="connectionString">Connection string to the underlying database.</param> /// <returns></returns> private static GridViewEditDataColumn AddGridViewForeignKeyColumn(ColumnMeta column, GridViewEditDataColumn dataColumn, string connectionString) { if (column.ReferenceTable.PrimaryKeys.Length > 1) { throw new ApplicationException(string.Format("Data source for lookup column {0} has more than one primary key.", column.Name)); } var comboBoxColumn = new GridViewDataComboBoxColumn(); comboBoxColumn.PropertiesComboBox.DataSource = GetLookUpDataSource(column.ReferenceTable, connectionString); comboBoxColumn.PropertiesComboBox.ValueField = column.ReferenceTable.PrimaryKeys[0].Name; var lookUpDisplayColumn = column.ReferenceTable.Columns.SingleOrDefault(c => c.Id == column.ReferenceTable.LookUpDisplayColumnId); if (lookUpDisplayColumn != null) { comboBoxColumn.PropertiesComboBox.TextField = lookUpDisplayColumn.Name; } dataColumn = comboBoxColumn; return(dataColumn); }
/// <summary> /// Renders a regular text box grid view column. /// </summary> /// <param name="column">Meta data about column, an instance of <see cref="ColumnMeta"/>.</param> /// <param name="dataColumn">An instance of <see cref="GridViewEditDataColumn"/>.</param> /// <returns>An instance of <see cref="GridViewDataTextColumn"/>.</returns> private static GridViewEditDataColumn AddGridViewDataTextColumn(ColumnMeta column, GridViewEditDataColumn dataColumn) { var textColumn = new GridViewDataTextColumn(); if (column.DataType == TypeCode.String && column.MaxLength.HasValue) { textColumn.PropertiesTextEdit.MaxLength = column.MaxLength.Value; } if (column.Name.ToLower() == "createdby" || column.Name.ToLower() == "modifiedby") { //hide createdby, createddate, modifiedby, modifieddate from edit form //textColumn.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.False; } textColumn.PropertiesTextEdit.ClientSideEvents.KeyDown = "function(s,e) { if (e.htmlEvent.keyCode == ASPxKey.Enter) e.htmlEvent.keyCode = ASPxKey.Tab; }"; dataColumn = textColumn; return(dataColumn); }