• DevExpressGridHelper


    using DevExpress.Utils;
    using DevExpress.Web;
    using DevExpress.Web.Mvc;
    using DevExpress.Web.Mvc.UI;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace Platform.Code.Helpers
    {
        public enum NAPColumnType
        {
            Bound = 0,
            Integer = 1,
            Decimal = 2,
            DateTime = 3,
            String = 4,
            Boolean = 5,
            Object = 6,
            Date = 7,
        }
    
    
    
        public enum NAPColumnControlType
        {
            None = 0,
            Textbox = 1,
            DropDownList = 2,
            Checkbox = 3,
            Hyperlink = 4,
            Memo = 5,
            DateEdit = 6,
            IntEdit = 7,
            DecimalEdit = 8,
            DateTimeEdit = 9,
            Button = 10,
            DropDownListTextBoxGroup = 11,
            TextboxWithButton = 12,
            DateWithoutOption = 13,
            TextRange = 14
        }
    
        public class DevExpressGridHelper
        {
            private GridViewSettings _Settings;
            public string gs_EditField = "";
            public string gs_Fields = "";
            public string gs_MandatoryField = "";
    
            public DevExpressGridHelper(GridViewSettings settings)
            {
                this._Settings = settings;
            }
    
            public void GridSetting(string as_FunCode)
            {
                this._Settings.Width = Unit.Percentage(100);
                this._Settings.SettingsEditing.Mode = GridViewEditingMode.Batch;
    
                this._Settings.SettingsEditing.BatchEditSettings.EditMode = GridViewBatchEditMode.Cell;
                this._Settings.SettingsEditing.BatchEditSettings.StartEditAction = GridViewBatchStartEditAction.Click;
    
                this._Settings.Styles.BatchEditModifiedCell.BackColor = Utils.GetColor.BatchEditModifiedCell;
                this._Settings.Styles.BatchEditDeletedRow.BackColor = Utils.GetColor.DeleteColor;
                this._Settings.Styles.BatchEditCell.BackColor = Utils.GetColor.BatchEditCellColor;
                this._Settings.Styles.SelectedRow.BackColor = Utils.GetColor.BackColor;
                this._Settings.Styles.SelectedRow.ForeColor = Utils.GetColor.ForeColor;
    
                this._Settings.ClientSideEvents.CustomizationWindowCloseUp = Utils.GetTranslation("CustomizationWindowCloseUp");
                this._Settings.SettingsBehavior.EnableCustomizationWindow = true;
                this._Settings.SettingsBehavior.AllowSelectByRowClick = true;
    
                this._Settings.SettingsAdaptivity.AdaptivityMode = GridViewAdaptivityMode.Off;
                this._Settings.SettingsAdaptivity.AdaptiveColumnPosition = GridViewAdaptiveColumnPosition.Right;
                this._Settings.SettingsAdaptivity.AdaptiveDetailColumnCount = 1;
                this._Settings.SettingsAdaptivity.AllowOnlyOneAdaptiveDetailExpanded = false;
                this._Settings.SettingsAdaptivity.HideDataCellsAtWindowInnerWidth = 0;
    
                this._Settings.SettingsResizing.ColumnResizeMode = ColumnResizeMode.Control;
                this._Settings.SettingsText.EmptyDataRow = Utils.GetTranslation("No data to display");
    
                this._Settings.CellEditorInitialize = (sender, e) =>
                {
                    ASPxEdit editor = (ASPxEdit)e.Editor;
                    editor.ValidationSettings.Display = Display.Dynamic;
                };
                this._Settings.CustomJSProperties = (s, e) =>
                {
                    e.Properties["cpPageSize"] = ((MVCxGridView)s).SettingsPager.PageSize;
                    Dictionary<object, int> visibleIndices = new Dictionary<object, int>();
                    var lo_GridView = s as MVCxGridView;
                    if (lo_GridView != null)
                    {
                        for (int i = 0; i < lo_GridView.VisibleRowCount; i++)
                        {
                            var ls_RowValue = lo_GridView.GetRowValues(i, lo_GridView.KeyFieldName);
                            if (!visibleIndices.ContainsKey(ls_RowValue))
                            {
                                visibleIndices.Add(ls_RowValue, i);
                            }
                        }
                    }
                    e.Properties["cpIndices"] = visibleIndices;
                };
                this._Settings.CustomColumnDisplayText = (sender, e) =>
                {
                    if (e.Column.FieldName == "RowNo")
                    {
                        if (e.VisibleIndex >= 0)
                        {
                            e.DisplayText = (e.VisibleIndex + 1).ToString();
                            e.Value = (e.VisibleIndex + 1).ToString();
                        }
                    }
                    this.FormatDisplayText(e);
                };
                this._Settings.PreRender = (sender, e) =>
                {
                    ASPxGridView gridView = (ASPxGridView)sender;
                    gridView.FilterExpression = string.Empty;
                };
                this._Settings.CommandButtonInitialize = (sender, e) =>
                {
                    if ((e.ButtonType == ColumnCommandButtonType.Update) || (e.ButtonType == ColumnCommandButtonType.Cancel))
                    {
                        e.Visible = false;
                    }
                };
                this._Settings.ClientLayout = (sender, e) =>
                {
                    if (e.LayoutMode == ClientLayoutMode.Saving)
                    {
                        if ((string)HttpContext.Current.Request.Cookies["bSave" + as_FunCode + this._Settings.Name + "Layout"].Value == "1")
                        {
                            HttpContext.Current.Response.Cookies[as_FunCode + this._Settings.Name + "Layout"].Value = e.LayoutData;
                            Utils.SaveUserLayoutToDatabase(as_FunCode + this._Settings.Name, e.LayoutData);
                        }
                    }
                    else
                    {
                        if (HttpContext.Current.Request.Cookies[as_FunCode + this._Settings.Name + "Layout"] == null || String.IsNullOrEmpty(HttpContext.Current.Request.Cookies[as_FunCode + this._Settings.Name + "Layout"].Value))
                        {
                            HttpContext.Current.Response.Cookies[as_FunCode + this._Settings.Name + "Layout"].Value = Utils.RestoreUserLayoutFromDatabase(as_FunCode + this._Settings.Name);
    
                        }
                        if (HttpContext.Current.Response.Cookies[as_FunCode + this._Settings.Name + "Layout"].Value != null && HttpContext.Current.Response.Cookies[as_FunCode + this._Settings.Name + "Layout"].Value != "")
                        {
                            e.LayoutData = HttpContext.Current.Response.Cookies[as_FunCode + this._Settings.Name + "Layout"].Value;
                        }
                        else
                        {
                            e.LayoutData = HttpContext.Current.Request.Cookies[as_FunCode + this._Settings.Name + "Layout"].Value;
                        }
                    }
                    HttpContext.Current.Response.Cookies["bSave" + as_FunCode + this._Settings.Name + "Layout"].Value = "0";
                };
                this._Settings.CustomActionRouteValues = "";
            }
    
            public void GridExportSetting(string as_FileName)
            {
                this._Settings.SettingsExport.Styles.Cell.Font.Name = "Calibri";
                this._Settings.SettingsExport.Styles.Header.Font.Name = "Calibri";
                this._Settings.SettingsExport.FileName = as_FileName + "_" + System.DateTime.Today.ToString("yyyyMMdd");
                this._Settings.SettingsExport.RenderBrick = (sender, e) =>
                {
                    MVCxGridViewColumn col = e.Column as MVCxGridViewColumn;
                    HyperLinkProperties properties = col.PropertiesEdit as HyperLinkProperties;
    
                    if (properties != null)
                    {
                        properties.NavigateUrlFormatString = "";
                        col.ColumnType = MVCxGridViewColumnType.TextBox;
                    }
                };
            }
    
            public void AddSelectCheckboxColumn()
            {
                this._Settings.CommandColumn.Visible = true;
                this._Settings.CommandColumn.Width = 50;
                this._Settings.CommandColumn.ShowClearFilterButton = true;
                this._Settings.CommandColumn.ShowSelectCheckbox = true;
                this._Settings.CommandColumn.SelectAllCheckboxMode = GridViewSelectAllCheckBoxMode.Page;
    
            }
    
            public void AddSelectRadioButtonColumn()
            {
                this._Settings.CommandColumn.Visible = true;
                this._Settings.CommandColumn.Width = 50;
                this._Settings.CommandColumn.ShowClearFilterButton = true;
                this._Settings.SettingsBehavior.AllowSelectSingleRowOnly = true;
                this._Settings.CommandColumn.ShowSelectCheckbox = true;
                this._Settings.CommandColumn.FixedStyle = GridViewColumnFixedStyle.Left;
            }
    
            public void AddScrollbar(int ai_Height)
            {
                this._Settings.Settings.HorizontalScrollBarMode = ScrollBarMode.Visible;
                this._Settings.Settings.VerticalScrollBarMode = ScrollBarMode.Visible;
                this._Settings.Settings.VerticalScrollableHeight = ai_Height;
            }
    
            public void AddGroupPanel()
            {
                this._Settings.Settings.ShowGroupPanel = true;
                this._Settings.SettingsText.GroupPanel = Utils.GetTranslation("Drag a column header here to group by that column");
            }
    
            public void AddPaging(int ai_PageSize, bool ab_ShowPaging = true)
            {
                this._Settings.SettingsPager.Visible = ab_ShowPaging;
                if (ab_ShowPaging)
                {
                    this._Settings.SettingsPager.PageSize = ai_PageSize;
                    this._Settings.SettingsPager.Position = PagerPosition.Top;
                    this._Settings.SettingsPager.FirstPageButton.Visible = true;
                    this._Settings.SettingsPager.LastPageButton.Visible = true;
                    this._Settings.SettingsPager.PageSizeItemSettings.Visible = true;
                    this._Settings.SettingsPager.PageSizeItemSettings.Items = Utils.GetPageSize();
                }
                else
                {
                    this._Settings.SettingsPager.Mode = GridViewPagerMode.ShowAllRecords;
                }
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="helper"></param>
            /// <param name="ab_Visible"></param>
            /// <param name="ao_GridViewNewItemRowPosition"></param>
            /// <param name="ab_HasRecover"></param>
            /// <param name="ab_ConfirmDelete"></param>
            /// <param name="as_ConfirmDeleteText"></param>
            public void AddCommandColumnButton(HtmlHelper helper
                , bool ab_Visible = true
                , GridViewNewItemRowPosition ao_GridViewNewItemRowPosition = GridViewNewItemRowPosition.Bottom
                , bool ab_HasRecover = true
                , bool ab_ConfirmDelete = false
                , int ai_CommandColumnWidth = 40
                , bool ab_HasAddButton = true
                , bool ab_HasDeleteButton = true)
            {
                this._Settings.CommandColumn.ShowClearFilterButton = true;
                this._Settings.CommandColumn.Visible = ab_Visible;
                this._Settings.CommandColumn.ShowDeleteButton = ab_HasDeleteButton;
                this._Settings.SettingsCommandButton.DeleteButton.Text = "-";
                this._Settings.SettingsCommandButton.DeleteButton.RenderMode = GridCommandButtonRenderMode.Button;
                this._Settings.SettingsCommandButton.DeleteButton.Styles.Style.Font.Underline = false;
                this._Settings.SettingsEditing.BatchEditSettings.HighlightDeletedRows = ab_HasRecover;
                this._Settings.SettingsBehavior.ConfirmDelete = ab_ConfirmDelete;
    
                if (ab_ConfirmDelete)
                    this._Settings.SettingsText.ConfirmDelete = Utils.GetMessage("2002", "[" + Utils.GenerateJson("1", Utils.GetTranslation("delete"), "String") + "]");
    
                this._Settings.CommandColumn.ShowRecoverButton = ab_HasRecover;
                this._Settings.SettingsCommandButton.RecoverButton.Text = "+";
                this._Settings.SettingsCommandButton.RecoverButton.RenderMode = GridCommandButtonRenderMode.Button;
                this._Settings.SettingsCommandButton.RecoverButton.Styles.Style.Font.Underline = false;
                this._Settings.CommandColumn.FixedStyle = GridViewColumnFixedStyle.Left;
                this._Settings.CommandColumn.Width = ai_CommandColumnWidth;
                this._Settings.SettingsEditing.NewItemRowPosition = ao_GridViewNewItemRowPosition;
    
                if (ab_HasAddButton)
                {
                    this._Settings.CommandColumn.SetHeaderTemplateContent(c =>
                    {
                        helper.DevExpress().Button(btnSettings =>
                        {
                            btnSettings.Text = "+";
                            btnSettings.Name = "btnAdd" + this._Settings.Name;
                            btnSettings.RenderMode = ButtonRenderMode.Button;
                            btnSettings.ControlStyle.Font.Underline = false;
                            btnSettings.Width = Unit.Percentage(100);
                            btnSettings.ClientVisible = ab_Visible;
                            btnSettings.ClientSideEvents.Click = "function (s,e){ " + this._Settings.Name + "_AddNewRow();}";
                            btnSettings.UseSubmitBehavior = false;
                        }).Render();
                    });
                }
                this._Settings.CommandColumn.HeaderStyle.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;
            }
    
            public void AddColumn(string as_FieldName, string as_Caption, NAPColumnType ao_ColumnType, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, string as_DisplayFormatString = "", NAPColumnControlType ao_ControlType = NAPColumnControlType.None, object[] ao_Object = null)
            {
                this._Settings.Columns.Add(column =>
                {
                    column.FieldName = as_FieldName;
                    column.Caption = Utils.GetTranslation(as_Caption);
                    this.ColumnSetting(column, ao_ColumnType, ai_Width, ab_EditFormSettingsVisible, as_DisplayFormatString, ao_ControlType, ao_Object);
                });
    
                if (ab_Editable)
                    gs_EditField += as_FieldName + ",";
    
                gs_Fields += as_FieldName + ",";
            }
    
            public void ColumnSetting(MVCxGridViewColumn ao_Column, NAPColumnType ao_ColumnType, int ai_Width, bool ab_EditFormSettingsVisible, string as_DisplayFormatString, NAPColumnControlType ao_ControlType, object[] ao_Object)
            {
                switch (ao_ColumnType)
                {
                    case NAPColumnType.DateTime:
                        ao_Column.Width = 120;
                        ao_Column.UnboundType = DevExpress.Data.UnboundColumnType.DateTime;
                        ao_Column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.False;
                        break;
                    case NAPColumnType.Integer:
                        ao_Column.Width = 80;
                        ao_Column.UnboundType = DevExpress.Data.UnboundColumnType.Integer;
                        ao_Column.HeaderStyle.HorizontalAlign = HorizontalAlign.Right;
                        ao_Column.CellStyle.HorizontalAlign = HorizontalAlign.Right;
                        break;
                    case NAPColumnType.Date:
                        ao_Column.Width = 90;
                        ao_Column.ColumnType = MVCxGridViewColumnType.DateEdit;
                        ao_Column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.True;
                        //column.PropertiesEdit.DisplayFormatString = "yyyyMMdd";
                        break;
                    case NAPColumnType.String:
                        ao_Column.Width = 50;
                        ao_Column.UnboundType = DevExpress.Data.UnboundColumnType.String;
                        ao_Column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.True;
                        ao_Column.Settings.AutoFilterCondition = AutoFilterCondition.Contains;
                        break;
                    case NAPColumnType.Object:
                        SetColumnControl(ao_Column, ao_ControlType, ao_Object);
                        break;
                }
                if (!string.IsNullOrWhiteSpace(as_DisplayFormatString))
                {
                    ao_Column.PropertiesEdit.DisplayFormatString = as_DisplayFormatString;
                }
                if (ai_Width != 0)
                    ao_Column.Width = ai_Width;
                if (ab_EditFormSettingsVisible)
                    ao_Column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.True;
                else
                    ao_Column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.False;
            }
    
            public void FormatDisplayText(ASPxGridViewColumnDisplayTextEventArgs e)
            {
                DateTime ldt_DtTmp; //TryParse
                decimal lde_DeTmp; //TryParse
                int li_ITmp; //TryParse
    
                var value = e.GetFieldValue(e.Column.FieldName);
    
                //there is no FormatString for string
                if (e.Column.UnboundType == DevExpress.Data.UnboundColumnType.String)
                {
                    return;
                }
                if (value != null && e.DisplayText == null && string.IsNullOrWhiteSpace(value.ToString()))
                {
                    return;
                }
                if (value == null && !string.IsNullOrWhiteSpace(e.DisplayText))
                {
                    return;
                }
                //For ListDataSource to Show Text
                if (value != null && e.DisplayText != null && e.DisplayText != value.ToString())
                {
                    return;
                }
    
                var formatString = e.Column.PropertiesEdit.DisplayFormatString;
                if (string.IsNullOrWhiteSpace(formatString) && value != null)
                {
                    switch (e.Column.UnboundType)
                    {
                        case DevExpress.Data.UnboundColumnType.DateTime:
                            formatString = Code.Utils.GetFormatString.DateTimeDisplay;
                            if (DateTime.TryParse(value.ToString(), out ldt_DtTmp))
                            {
                                e.DisplayText = string.Format("{0:" + formatString + "}", ldt_DtTmp);
                            }
                            break;
                        case DevExpress.Data.UnboundColumnType.Decimal:
                            formatString = Code.Utils.GetFormatString.DecimalDisplay;
                            if (decimal.TryParse(value.ToString(), out lde_DeTmp))
                            {
                                e.DisplayText = string.Format("{0:" + formatString + "}", lde_DeTmp);
                            }
                            break;
                        case DevExpress.Data.UnboundColumnType.Integer:
                            formatString = Code.Utils.GetFormatString.IntDisplay;
                            if (int.TryParse(value.ToString(), out li_ITmp))
    
                            {
                                e.DisplayText = string.Format("{0:" + formatString + "}", li_ITmp);
                            }
                            if (value == DBNull.Value)
                            {
                                e.DisplayText = "";
                            }
                            break;
                        case DevExpress.Data.UnboundColumnType.Bound:
                            if (((DevExpress.Web.Mvc.MVCxGridViewColumn)e.Column).ColumnType != MVCxGridViewColumnType.Default)
                            {
                                switch (((DevExpress.Web.Mvc.MVCxGridViewColumn)e.Column).ColumnType)
                                {
                                    case MVCxGridViewColumnType.TextBox:
                                        break;
                                    case MVCxGridViewColumnType.DateEdit:
                                        formatString = Code.Utils.GetFormatString.DateEdit;
                                        if (DateTime.TryParse(value.ToString(), out ldt_DtTmp))
                                        {
                                            e.DisplayText = string.Format("{0:" + formatString + "}", ldt_DtTmp);
                                        }
                                        break;
                                    case MVCxGridViewColumnType.SpinEdit:
                                        break;
                                    case MVCxGridViewColumnType.TimeEdit:
                                        break;
                                }
                            }
                            break;
                    }
                }
            }
    
            public void SetColumnControl(MVCxGridViewColumn ao_Column, NAPColumnControlType ao_ControlType, object[] ao_Object)
            {
                bool lb_IsRequired;
                int li_MaxLength;
                string ls_Text;
                string ls_Value;
                string ls_ValidationEvent;
                string urlFormatString;
                object lo_Model;
    
                switch (ao_ControlType)
                {
                    case NAPColumnControlType.Textbox:
                        li_MaxLength = Convert.ToInt32(ao_Object[0]);
                        lb_IsRequired = ao_Object[1] == null ? false : Convert.ToBoolean(ao_Object[1]);
                        ls_ValidationEvent = ao_Object[2] == null ? null : ao_Object[2].ToString();
                        ao_Column.EditorProperties().TextBox(p =>
                        {
                            p.MaxLength = li_MaxLength;
                            p.ValidationSettings.RequiredField.IsRequired = lb_IsRequired;
                            p.ValidationSettings.RequiredField.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(ao_Column.Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                            p.ValidationSettings.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(ao_Column.Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                            p.ValidationSettings.EnableCustomValidation = ls_ValidationEvent != null;
                            p.ClientSideEvents.Validation = ls_ValidationEvent;
                        });
                        break;
    
                    case NAPColumnControlType.DropDownList:
                        lo_Model = ao_Object[0];
                        ls_Text = ao_Object[1].ToString();
                        ls_Value = ao_Object[2].ToString();
                        lb_IsRequired = ao_Object[3] == null ? false : Convert.ToBoolean(ao_Object[3]);
                        ls_ValidationEvent = ao_Object[4] == null ? null : ao_Object[4].ToString();
                        ao_Column.EditorProperties().ComboBox(p =>
                        {
                            p.TextField = ls_Text;
                            p.ValueField = ls_Value;
                            p.ValueType = typeof(string);
                            p.DataSource = lo_Model;
                            p.ValidationSettings.RequiredField.IsRequired = lb_IsRequired;
                            p.ValidationSettings.RequiredField.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(ao_Column.Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                            p.ValidationSettings.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(ao_Column.Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                            p.ValidationSettings.EnableCustomValidation = ls_ValidationEvent != null;
                            p.ClientSideEvents.Validation = ls_ValidationEvent;
                        });
                        break;
    
                    case NAPColumnControlType.Hyperlink:
                        ao_Column.ColumnType = MVCxGridViewColumnType.HyperLink;
                        HyperLinkProperties properties = ao_Column.PropertiesEdit as HyperLinkProperties;
                        urlFormatString = ao_Object[0].ToString();
                        properties.NavigateUrlFormatString = HttpUtility.UrlDecode(urlFormatString);
                        properties.TextField = ao_Column.Caption;
                        properties.Target = "_blank";
                        break;
    
                    case NAPColumnControlType.Memo:
                        ao_Column.ColumnType = MVCxGridViewColumnType.Memo;
                        break;
                }
            }
    
            public void SetColumnConditionalFormatting(string as_FieldName, string as_Condition, GridConditionHighlightFormat ao_HighlightFormat)
            {
                this._Settings.FormatConditions.AddHighlight(as_FieldName, as_Condition, ao_HighlightFormat);
            }
    
            public void CommonColumnSetting(MVCxGridViewColumn ao_Column, string as_FieldName, string as_Caption, int ai_Width, bool ab_Editable, bool ab_EditFormSettingsVisible, string as_DisplayFormatString = "", bool ab_IsRequired = false)
            {
                ao_Column.FieldName = as_FieldName;
                ao_Column.Caption = Utils.GetTranslation(as_Caption);
                ao_Column.HeaderStyle.Wrap = DefaultBoolean.True;
    
                if (!string.IsNullOrWhiteSpace(as_DisplayFormatString))
                {
                    ao_Column.PropertiesEdit.DisplayFormatString = as_DisplayFormatString;
                }
                if (ai_Width != 0)
                    ao_Column.Width = ai_Width;
                if (ab_EditFormSettingsVisible)
                    ao_Column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.True;
                else
                    ao_Column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.False;
    
                ao_Column.CellStyle.BackColor = System.Drawing.Color.Transparent;
                if (ab_IsRequired)
                    gs_MandatoryField += as_FieldName + ",";
    
                if (ab_Editable)
                {
                    gs_EditField += as_FieldName + ",";
                    ao_Column.CellStyle.BackColor = Utils.GetColor.EditableColor;
                }
    
                gs_Fields += as_FieldName + ",";
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="as_FieldName">Field name</param>
            /// <param name="as_Caption">Column caption</param>
            /// <param name="ao_ColumnType">Column type</param>
            /// <param name="ai_Width">Column width</param>
            /// <param name="ab_Editable">Column editable</param>
            /// <param name="ab_EditFormSettingsVisible">Column edit form settings visible</param>
            /// <param name="as_DisplayFormatString">Column display format string. e.g: yyyyMMdd HH:mm:ss</param>
            public void AddNormalColumn(string as_FieldName, string as_Caption, NAPColumnType ao_ColumnType, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, string as_DisplayFormatString = "")
            {
                this._Settings.Columns.Add(column =>
                {
                    switch (ao_ColumnType)
                    {
                        case NAPColumnType.DateTime:
                            column.Width = 120;
                            column.UnboundType = DevExpress.Data.UnboundColumnType.DateTime;
                            column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.False;
                            break;
                        case NAPColumnType.Integer:
                            column.Width = 80;
                            column.UnboundType = DevExpress.Data.UnboundColumnType.Integer;
                            column.HeaderStyle.HorizontalAlign = HorizontalAlign.Right;
                            column.CellStyle.HorizontalAlign = HorizontalAlign.Right;
                            break;
                        case NAPColumnType.Date:
                            column.Width = 90;
                            column.ColumnType = MVCxGridViewColumnType.DateEdit;
                            column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.True;
                            //column.PropertiesEdit.DisplayFormatString = "yyyyMMdd";
                            break;
                        case NAPColumnType.String:
                            column.UnboundType = DevExpress.Data.UnboundColumnType.String;
                            column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.True;
                            column.Settings.AutoFilterCondition = AutoFilterCondition.Contains;
                            break;
                    }
                    this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, as_DisplayFormatString);
                });
    
            }
    
            public void AddTextBoxColumn(string as_FieldName, string as_Caption, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, string as_DisplayFormatString = "", int ai_MaxLength = 0, bool ab_IsRequired = false, string as_ValidationEvent = null, string as_Mask = null)
            {
    
    
                this._Settings.Columns.Add(column =>
            {
                this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, as_DisplayFormatString, ab_IsRequired);
    
    
                column.EditorProperties().TextBox(textBoxProperties =>
                {
                    if (ai_MaxLength > 0) textBoxProperties.MaxLength = ai_MaxLength;
                    if (!string.IsNullOrWhiteSpace(as_Mask))
                    {
                        textBoxProperties.MaskSettings.Mask = as_Mask;
                        textBoxProperties.MaskSettings.IncludeLiterals = MaskIncludeLiteralsMode.All;
                    }
                    if (ab_IsRequired)
                    {
                        textBoxProperties.ValidationSettings.RequiredField.IsRequired = ab_IsRequired;
                        textBoxProperties.ValidationSettings.RequiredField.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                        textBoxProperties.ValidationSettings.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                    }
                    if (!string.IsNullOrWhiteSpace(as_ValidationEvent))
                    {
                        textBoxProperties.ValidationSettings.EnableCustomValidation = true;
                        textBoxProperties.ClientSideEvents.Validation = as_ValidationEvent;
                    }
    
                });
            });
    
            }
    
            public void AddDateEditorColumn(string as_FieldName, string as_Caption, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, string as_DisplayFormatString = "", string as_EditFormatString = "", DateTime? adt_MaxDate = null, DateTime? adt_MinDate = null, bool ab_IsRequired = false, string as_ValidationEvent = null, string as_DropDownEvent = null)
            {
                this._Settings.Columns.Add(column =>
                {
                    this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, as_DisplayFormatString, ab_IsRequired);
    
                    column.ColumnType = MVCxGridViewColumnType.DateEdit;
                    column.EditorProperties().DateEdit(dateEditProperties =>
                    {
                        dateEditProperties.UseMaskBehavior = true;
                        if (adt_MinDate != null) dateEditProperties.MinDate = (DateTime)adt_MinDate;
                        if (adt_MaxDate != null) dateEditProperties.MaxDate = (DateTime)adt_MaxDate;
                        //dateEditProperties.EditFormat = EditFormat.Date;
                        dateEditProperties.EditFormatString = as_EditFormatString;
                        dateEditProperties.DisplayFormatInEditMode = true;
                        dateEditProperties.EditFormat = EditFormat.Custom;
                        dateEditProperties.AllowUserInput = true;
                        dateEditProperties.AllowNull = true;
                        dateEditProperties.DisplayFormatString = as_DisplayFormatString;
    
                        if (ab_IsRequired)
                        {
                            dateEditProperties.ValidationSettings.RequiredField.IsRequired = ab_IsRequired;
                            dateEditProperties.ValidationSettings.RequiredField.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                            dateEditProperties.ValidationSettings.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                        }
                        if (as_EditFormatString == Utils.GetFormatString.DateTimeEdit)
                        {
                            dateEditProperties.TimeSectionProperties.Visible = true;
                            dateEditProperties.TimeSectionProperties.TimeEditProperties.EditFormat = EditFormat.Custom;
                            dateEditProperties.TimeSectionProperties.ShowHourHand = true;
                            dateEditProperties.TimeSectionProperties.TimeEditProperties.EditFormatString = "HH:mm:ss";
                            dateEditProperties.CalendarProperties.FastNavProperties.EnablePopupAnimation = true;
                            dateEditProperties.ClientSideEvents.DropDown = as_DropDownEvent;
                            dateEditProperties.ClientSideEvents.CloseUp = "function(s,e){if(s.GetValue()==null||yyyy_MM_dd(s.GetValue(),'/')=='100/01/01') {s.GetTimeEdit().SetValue(null);s.SetValue(null);}}";
                            dateEditProperties.ClientSideEvents.ValueChanged = "function(s,e){if(s.GetValue()==null||yyyy_MM_dd(s.GetValue(),'/')=='100/01/01') {s.GetTimeEdit().SetValue(null);s.SetValue(null);}}";
                        }
                        if (!string.IsNullOrWhiteSpace(as_ValidationEvent))
                        {
                            dateEditProperties.ValidationSettings.EnableCustomValidation = true;
                            dateEditProperties.ClientSideEvents.Validation = as_ValidationEvent;
                        }
                    });
                });
    
            }
    
            public void AddTimeEditorColumn(HtmlHelper helper, string as_FieldName, string as_Caption, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, string as_DisplayFormatString = "", string as_EditFormatString = "", bool ab_IsRequired = false, string as_ValidationEvent = null)
            {
                this._Settings.Columns.Add(column =>
                {
    
                    this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, as_DisplayFormatString, ab_IsRequired);
                    column.EditorProperties().TextBox(textBoxProperties =>
                    {
                        textBoxProperties.MaxLength = 5;
    
                        textBoxProperties.MaskSettings.Mask = "00:00";
                        textBoxProperties.MaskSettings.IncludeLiterals = MaskIncludeLiteralsMode.All;
                        if (ab_IsRequired)
                        {
                            textBoxProperties.ValidationSettings.RequiredField.IsRequired = ab_IsRequired;
                            textBoxProperties.ValidationSettings.RequiredField.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                            textBoxProperties.ValidationSettings.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                        }
                        if (!string.IsNullOrWhiteSpace(as_ValidationEvent))
                        {
                            textBoxProperties.ValidationSettings.EnableCustomValidation = true;
                            textBoxProperties.ClientSideEvents.Validation = as_ValidationEvent;
                        }
                    });
    
    
                });
            }
    
            public void AddComboboxColumn(string as_FieldName, string as_Caption, object ao_Model, string as_ValueFieldName, string as_TextFieldName, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, bool ab_IsRequired = false, string as_ValidationEvent = null, string as_SelectChangedEvent = null, string as_Type = "Int", object ao_CallbackRouteValues = null, string as_BeginCallback = null, string as_EndCallback = null)
            {
                this._Settings.Columns.Add(column =>
                {
                    this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, ab_IsRequired: ab_IsRequired);
    
                    column.ColumnType = MVCxGridViewColumnType.ComboBox;
                    column.EditorProperties().ComboBox(comboBoxProperties =>
                    {
                        comboBoxProperties.TextField = as_TextFieldName;
                        comboBoxProperties.ValueField = as_ValueFieldName;
                        comboBoxProperties.ValueType = as_Type == "Int" ? typeof(int) : typeof(string);
                        comboBoxProperties.DataSource = ao_Model;
                        if (ao_CallbackRouteValues != null) comboBoxProperties.CallbackRouteValues = ao_CallbackRouteValues;
                        if (as_BeginCallback != null) comboBoxProperties.ClientSideEvents.BeginCallback = as_BeginCallback;
                        if (as_EndCallback != null) comboBoxProperties.ClientSideEvents.EndCallback = as_EndCallback;
                        if (ab_IsRequired)
                        {
                            comboBoxProperties.ValidationSettings.RequiredField.IsRequired = ab_IsRequired;
                            comboBoxProperties.ValidationSettings.RequiredField.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                            comboBoxProperties.ValidationSettings.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                            //if (!string.IsNullOrWhiteSpace(as_SelectChangedEvent))
                            //{
                            //    comboBoxProperties.ClientSideEvents.SelectedIndexChanged = as_SelectChangedEvent;
                            //}
                        }
                        if (!string.IsNullOrWhiteSpace(as_ValidationEvent))
                        {
                            comboBoxProperties.ValidationSettings.EnableCustomValidation = true;
                            comboBoxProperties.ClientSideEvents.Validation = as_ValidationEvent;
    
                        }
                        if (!string.IsNullOrWhiteSpace(as_SelectChangedEvent))
                        {
                            comboBoxProperties.ClientSideEvents.SelectedIndexChanged = as_SelectChangedEvent;
                        }
                        comboBoxProperties.EnableSynchronization = DefaultBoolean.True;
                    });
    
                });
    
            }
    
            public void AddHyperlinkColumn(string as_FieldName, string as_Caption, string as_urlFormatString, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, bool ab_IsRequired = false, string as_ValidationEvent = null)
            {
                this._Settings.Columns.Add(column =>
                {
                    this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, ab_IsRequired: ab_IsRequired);
    
                    column.ColumnType = MVCxGridViewColumnType.HyperLink;
                    column.EditorProperties().HyperLink(hyperLinkProperties =>
                    {
                        hyperLinkProperties.NavigateUrlFormatString = HttpUtility.UrlDecode(as_urlFormatString);
                        hyperLinkProperties.TextField = as_FieldName;
                        hyperLinkProperties.Target = "_blank";
                    });
    
                });
            }
    
            public void AddMapHyperlinkColumn(HtmlHelper helper, string as_FieldName, string as_Caption, string as_urlFormatString, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, string as_DisplayFormatString = null, bool ab_IsRequired = false, string as_ValidationEvent = null, string as_LatFieldName = "", string as_LngFieldName = "")
            {
                this._Settings.Columns.Add(column =>
                {
                    this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, ab_IsRequired: ab_IsRequired, as_DisplayFormatString: as_DisplayFormatString);
    
                    column.ColumnType = MVCxGridViewColumnType.HyperLink;
                    column.SetDataItemTemplateContent(container =>
                    {
                        if (container.VisibleIndex >= 0)
                        {
    
                            helper.DevExpress().HyperLink(hyperLinkProperties =>
                            {
                                var ls_KeyValue = container.KeyValue;
                                if (DataBinder.Eval(container.DataItem, as_FieldName) != DBNull.Value && DataBinder.Eval(container.DataItem, as_FieldName).ToString() != "")
                                    if (as_DisplayFormatString == Utils.GetFormatString.DateTimeDisplay)
                                        hyperLinkProperties.Properties.Text = Convert.ToDateTime(DataBinder.Eval(container.DataItem, as_FieldName).ToString()).ToString(Utils.GetFormatString.DateTimeDisplay);
                                    else
                                        hyperLinkProperties.Properties.Text = DataBinder.Eval(container.DataItem, as_FieldName).ToString();
                                hyperLinkProperties.Name = "lnk_" + as_FieldName + ls_KeyValue + Utils.GenerateRandom(4);
                                hyperLinkProperties.Properties.NavigateUrlFormatString = HttpUtility.UrlDecode(String.Format(as_urlFormatString, DataBinder.Eval(container.DataItem, as_LatFieldName), DataBinder.Eval(container.DataItem, as_LngFieldName)));
                                hyperLinkProperties.Properties.TextField = as_FieldName;
                                hyperLinkProperties.Properties.ClientSideEvents.Click = "function(s,e){window.open('" + hyperLinkProperties.Properties.NavigateUrlFormatString + "', '_blank')}";
                                hyperLinkProperties.Properties.Target = "_blank";
                            }).Render();
                        }
                        else
                        {
                            if (DataBinder.Eval(container.DataItem, as_FieldName) != null)
                                helper.ViewContext.Writer.Write(DataBinder.Eval(container.DataItem, as_FieldName).ToString());
    
                        }
                    });
    
    
    
                });
            }
    
            public void AddMemoColumn(string as_FieldName, string as_Caption, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, bool ab_IsRequired = false, string as_ValidationEvent = null)
            {
                this._Settings.Columns.Add(column =>
                {
                    this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, ab_IsRequired: ab_IsRequired);
    
                    column.ColumnType = MVCxGridViewColumnType.Memo;
                    column.EditorProperties().Memo(memoProperties =>
                    {
                        if (ab_IsRequired)
                        {
                            memoProperties.ValidationSettings.RequiredField.IsRequired = ab_IsRequired;
                            memoProperties.ValidationSettings.RequiredField.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                            memoProperties.ValidationSettings.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                        }
                        if (!string.IsNullOrWhiteSpace(as_ValidationEvent))
                        {
                            memoProperties.ValidationSettings.EnableCustomValidation = true;
                            memoProperties.ClientSideEvents.Validation = as_ValidationEvent;
                        }
                    });
                });
            }
    
            public void AddCheckBoxColumn(string as_FieldName, string as_Caption, object ao_ValueChecked, object ao_ValueUnchecked, Type ao_ValueType, string as_ValueCheckedString, string as_ValueUncheckedString, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, bool ab_IsRequired = false, string as_ValidationEvent = null)
            {
                this._Settings.Columns.Add(column =>
                {
                    this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, ab_IsRequired: ab_IsRequired);
    
                    column.ColumnType = MVCxGridViewColumnType.CheckBox;
                    var checkBoxProperties = column.PropertiesEdit as CheckBoxProperties;
                    checkBoxProperties.ValueChecked = ao_ValueChecked;
                    checkBoxProperties.ValueUnchecked = ao_ValueUnchecked;
                    checkBoxProperties.ValueType = ao_ValueType;
                    checkBoxProperties.ValueCheckedString = as_ValueCheckedString;
                    checkBoxProperties.ValueUncheckedString = as_ValueUncheckedString;
                });
            }
    
            public void AddCheckBoxColumnWithinHeader(HtmlHelper helper, string as_FieldName, string as_Caption, object ao_ValueChecked, object ao_ValueUnchecked, Type ao_ValueType, string as_ValueCheckedString, string as_ValueUncheckedString, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, bool ab_IsRequired = false, string as_ValidationEvent = null)
            {
                this._Settings.Columns.Add(column =>
                {
                    this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, ab_IsRequired: ab_IsRequired);
    
                    column.SetHeaderTemplateContent(c =>
                    {
                        helper.DevExpress().CheckBox(chkSettings =>
                        {
                            chkSettings.Text = as_Caption;
                            chkSettings.Name = "chk" + this._Settings.Name + as_FieldName + "_SelectAll";
                            chkSettings.ControlStyle.Font.Underline = false;
                            chkSettings.Width = Unit.Percentage(100);
                            chkSettings.ControlStyle.HorizontalAlign = HorizontalAlign.Center;
                            chkSettings.Properties.ClientSideEvents.CheckedChanged = "function (s,e){ On" + chkSettings.Name + "(s,e);}";
                        }).Render();
                    });
                    column.ColumnType = MVCxGridViewColumnType.CheckBox;
                    var checkBoxProperties = column.PropertiesEdit as CheckBoxProperties;
                    checkBoxProperties.ValueChecked = ao_ValueChecked;
                    checkBoxProperties.ValueUnchecked = ao_ValueUnchecked;
                    checkBoxProperties.ValueType = ao_ValueType;
                    checkBoxProperties.ValueCheckedString = as_ValueCheckedString;
                    checkBoxProperties.ValueUncheckedString = as_ValueUncheckedString;
                    column.Settings.AllowSort = DefaultBoolean.False;
    
                });
            }
    
            public void AddHyperlinkDynamicClientSideColumn(string as_FieldName, string as_Caption, HtmlHelper helper, string[] aa_DataFieldName, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, string as_DisplayFormatString = null, string as_ClientSideEventName = null)
            {
                this._Settings.Columns.Add(column =>
                {
                    this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible);
                    column.SetDataItemTemplateContent(container =>
                    {
                        if (container.VisibleIndex < 0)
                            return;
    
                        object[] la_DataValue = new object[aa_DataFieldName.Length];
                        bool lb_Valid = true;
                        string ls_ValueString = "";
                        for (int i = 0; i < aa_DataFieldName.Length; i++)
                        {
                            if (!string.IsNullOrWhiteSpace(aa_DataFieldName[i]))
                            {
                                la_DataValue[i] = DataBinder.Eval(container.DataItem, aa_DataFieldName[i]);
    
                            }
                        }
                        for (int i = 0; i < la_DataValue.Length; i++)
                        {
                            if (la_DataValue[i] == null)
                            {
                                lb_Valid = false;
                            }
                            else
                            {
                                ls_ValueString = ls_ValueString + "'" + (la_DataValue[i] == DBNull.Value ? "" : la_DataValue[i].ToString()) + "',";
    
    
                            }
                        }
    
                        if (lb_Valid)
                        {
    
                            if (ls_ValueString != "")
                            {
    
                                ls_ValueString = ls_ValueString.Substring(0, ls_ValueString.Length - 1);
                                if (ls_ValueString != "''")
                                {
                                    helper.DevExpress().HyperLink(hyperlink =>
                                    {
                                        var ls_KeyValue = container.KeyValue;
                                        hyperlink.Name = "lnk_" + as_FieldName + ls_KeyValue + Utils.GenerateRandom(4);
                                        if (as_DisplayFormatString == Utils.GetFormatString.DateDisplay)
                                            hyperlink.Properties.Text = Convert.ToDateTime(DataBinder.Eval(container.DataItem, as_FieldName).ToString()).ToString(Utils.GetFormatString.DateDisplay);
                                        else
                                            hyperlink.Properties.Text = DataBinder.Eval(container.DataItem, as_FieldName).ToString();
                                        hyperlink.Properties.TextField = as_FieldName;
                                        hyperlink.Properties.ClientSideEvents.Click = "function (s,e){ " + as_ClientSideEventName + "(" + ls_ValueString + ");}";
                                        hyperlink.Properties.Target = "_blank";
                                    }).Render();
                                }
                                else
                                {
                                    helper.ViewContext.Writer.Write("");
                                }
                            }
                        }
                        else
                        {
                            if (DataBinder.Eval(container.DataItem, as_FieldName) != null)
                                helper.ViewContext.Writer.Write(DataBinder.Eval(container.DataItem, as_FieldName).ToString());
    
                        }
    
    
                    });
    
                });
            }
    
            /// <summary>
            /// Only support decimal or Integer
            /// </summary>
            /// <param name="as_FieldName"></param>
            /// <param name="as_Caption"></param>
            /// <param name="ai_Width"></param>
            /// <param name="ab_Editable"></param>
            /// <param name="ab_EditFormSettingsVisible"></param>
            /// <param name="as_DisplayFormatString">Displayformat E.g n2,d</param>
            /// <param name="ao_NumberType">Decimal or Integer </param>
            /// <param name="afl_MinValue">Min value</param>
            /// <param name="afl_MaxValue">Max value</param>
            /// <param name="ab_IsRequired"></param>
            /// <param name="as_ValidationEvent"></param>
            public void AddNumberColumn(HtmlHelper helper, string as_FieldName, string as_Caption, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, string as_DisplayFormatString = "", SpinEditNumberType ao_NumberType = SpinEditNumberType.Float, float? afl_MinValue = null, float? afl_MaxValue = null, bool ab_IsRequired = false, string as_ValidationEvent = null, DevExpress.Data.SummaryItemType ao_SummaryType = DevExpress.Data.SummaryItemType.None, bool ab_IsRealTimeCalTotalSum = false)
            {
                this._Settings.Columns.Add(column =>
                {
                    this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, as_DisplayFormatString, ab_IsRequired: ab_IsRequired);
    
                    column.ColumnType = MVCxGridViewColumnType.TextBox;
                    column.HeaderStyle.HorizontalAlign = HorizontalAlign.Right;
                    column.CellStyle.HorizontalAlign = HorizontalAlign.Right;
                    column.UnboundType = DevExpress.Data.UnboundColumnType.Decimal;
    
                    column.EditorProperties().SpinEdit(spinEditProperties =>
                    {
                        spinEditProperties.NumberFormat = SpinEditNumberFormat.Custom;
                        spinEditProperties.DisplayFormatString = as_DisplayFormatString;
                        spinEditProperties.DisplayFormatInEditMode = true;
                        spinEditProperties.NumberType = ao_NumberType;
    
                        //spinEditProperties.AllowNull = false;
                        spinEditProperties.SpinButtons.Visible = false;
                        spinEditProperties.SpinButtons.ShowLargeIncrementButtons = false;
                        spinEditProperties.SpinButtons.ShowIncrementButtons = false;
                        spinEditProperties.Increment = 0;
                        spinEditProperties.AllowMouseWheel = false;
                        if (afl_MinValue != null) spinEditProperties.MinValue = (decimal)afl_MinValue;
                        if (afl_MaxValue != null) spinEditProperties.MaxValue = (decimal)afl_MaxValue;
                        if (ab_IsRequired)
                        {
                            spinEditProperties.ValidationSettings.RequiredField.IsRequired = ab_IsRequired;
                            spinEditProperties.ValidationSettings.RequiredField.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                            spinEditProperties.ValidationSettings.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                        }
                        if (!string.IsNullOrWhiteSpace(as_ValidationEvent))
                        {
                            spinEditProperties.ValidationSettings.EnableCustomValidation = true;
                            spinEditProperties.ClientSideEvents.Validation = as_ValidationEvent;
                        }
                    });
    
                    if (ab_IsRealTimeCalTotalSum)
                    {
                        ASPxSummaryItem summaryItem = new ASPxSummaryItem(column.FieldName, DevExpress.Data.SummaryItemType.Sum);
                        summaryItem.Tag = "SummaryItem_Sum_" + column.FieldName;
                        this._Settings.TotalSummary.Add(summaryItem);
                        column.SetFooterTemplateContent(c =>
                        {
    
                            helper.DevExpress().Label(lbSettings =>
                            {
                                string fieldName = (c.Column as GridViewDataColumn).FieldName;
                                //c.data
                                lbSettings.Name = "lbl_Sum_" + fieldName;
                                lbSettings.Properties.EnableClientSideAPI = true;
                                ASPxSummaryItem summaryItem1 = c.Grid.TotalSummary.First(i => i.Tag == ("SummaryItem_Sum_" + fieldName));
                                lbSettings.Text = string.Format("{0:" + as_DisplayFormatString + "}", (c.Grid.GetTotalSummaryValue(summaryItem1) ?? 0));
    
                            }).Render();
                        });
                    }
                });
    
                this._Settings.TotalSummary.Add(ao_SummaryType, as_FieldName).DisplayFormat = as_DisplayFormatString;
            }
    
            public void ChangeCellColor(dynamic ao_Model, ASPxGridViewTableDataCellEventArgs e)
            {
                //string[] la_Fields = this.gs_Fields.Split(',');
                //for (int i = 0; i < la_Fields.Count(); i++)
                //{
                for (int j = 0; j < ao_Model.Tables[0].Rows.Count; j++)
                {
                    if (e.DataColumn.FieldName == ao_Model.Tables[0].Rows[j]["FieldName"].ToString())// && ao_Model.Tables[0].Rows[j]["FieldName"].ToString() == la_Fields[i].ToString())
                    {
                        if (e.KeyValue != null && e.KeyValue.ToString() == ao_Model.Tables[0].Rows[j]["TableUID"].ToString() && ao_Model.Tables[0].Rows[j]["IsChanged"].ToString() == "1")
                        {
                            //if (e.DataColumn.FieldName == ao_Model.Tables[0].Rows[j][2].ToString())
                            //{
                            e.Cell.BackColor = Utils.GetColor.ChangedColor;
                            break;
                            //}
                        }
                    }
                }
            }
    
            public void AddButtonColumn(HtmlHelper helper, string as_FieldName, string as_Caption, string as_ParamField, int ai_Width = 0,
    
                bool ab_EditFormSettingsVisible = false, string as_OnClickEvent = null)
            {
                this._Settings.Columns.Add(column =>
                {
                    this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, false, ab_EditFormSettingsVisible, "", false);
    
                    column.UnboundType = DevExpress.Data.UnboundColumnType.String;
                    //column.EditorProperties().TextBox(textBoxProperties =>
                    //{
                    //    if (ai_MaxLength < 0) textBoxProperties.MaxLength = ai_MaxLength;
                    //    if (!string.IsNullOrWhiteSpace(as_Mask))
                    //    {
                    //        textBoxProperties.MaskSettings.Mask = as_Mask;
                    //        textBoxProperties.MaskSettings.IncludeLiterals = MaskIncludeLiteralsMode.All;
                    //    }
                    //    if (ab_IsRequired)
                    //    {
                    //        textBoxProperties.ValidationSettings.RequiredField.IsRequired = ab_IsRequired;
                    //        textBoxProperties.ValidationSettings.RequiredField.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                    //        textBoxProperties.ValidationSettings.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                    //    }
                    //    if (!string.IsNullOrWhiteSpace(as_ValidationEvent))
                    //    {
                    //        textBoxProperties.ValidationSettings.EnableCustomValidation = true;
                    //        textBoxProperties.ClientSideEvents.Validation = as_ValidationEvent;
                    //    }
    
                    //});
                    column.SetDataItemTemplateContent(container =>
                    {
                        if (container.VisibleIndex < 0)
                            return;
    
                        var ls_ParamValue = DataBinder.Eval(container.DataItem, as_ParamField).ToString();
                        helper.DevExpress().Button(buttonSetting =>
                        {
                            buttonSetting.Text = "View";
                            buttonSetting.Name = "btnView" + as_FieldName + container.VisibleIndex;
                            buttonSetting.Width = Unit.Percentage(100);
                            if (!string.IsNullOrWhiteSpace(as_OnClickEvent))
                            {
                                buttonSetting.ClientSideEvents.Click = "function(s,e){ " + as_OnClickEvent + "(" + ls_ParamValue + "); }";
                            }
                        }).Render();
                    });
    
    
                });
    
            }
    
    
            #region Bank Column Setting
            public MVCxGridViewColumn AddBandNormalColumn(string as_FieldName, string as_Caption, NAPColumnType ao_ColumnType, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, string as_DisplayFormatString = "")
            {
                MVCxGridViewColumn column = new MVCxGridViewColumn();
                switch (ao_ColumnType)
                {
                    case NAPColumnType.DateTime:
                        column.Width = 120;
                        column.UnboundType = DevExpress.Data.UnboundColumnType.DateTime;
                        column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.False;
                        break;
                    case NAPColumnType.Integer:
                        column.Width = 80;
                        column.UnboundType = DevExpress.Data.UnboundColumnType.Integer;
                        column.HeaderStyle.HorizontalAlign = HorizontalAlign.Right;
                        column.CellStyle.HorizontalAlign = HorizontalAlign.Right;
                        break;
                    case NAPColumnType.Date:
                        column.Width = 90;
                        column.ColumnType = MVCxGridViewColumnType.DateEdit;
                        column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.True;
                        //column.PropertiesEdit.DisplayFormatString = "yyyyMMdd";
                        break;
                    case NAPColumnType.String:
                        column.UnboundType = DevExpress.Data.UnboundColumnType.String;
                        column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.True;
                        column.Settings.AutoFilterCondition = AutoFilterCondition.Contains;
                        break;
                }
                this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, as_DisplayFormatString);
    
                return column;
            }
            public MVCxGridViewColumn AddBandTextBoxColumn(string as_FieldName, string as_Caption, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, string as_DisplayFormatString = "", int ai_MaxLength = 0, bool ab_IsRequired = false, string as_ValidationEvent = null, string as_Mask = null)
            {
    
                MVCxGridViewColumn column = new MVCxGridViewColumn();
                this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, as_DisplayFormatString, ab_IsRequired);
                column.EditorProperties().TextBox(textBoxProperties =>
                {
                    if (ai_MaxLength > 0) textBoxProperties.MaxLength = ai_MaxLength;
                    if (!string.IsNullOrWhiteSpace(as_Mask))
                    {
                        textBoxProperties.MaskSettings.Mask = as_Mask;
                        textBoxProperties.MaskSettings.IncludeLiterals = MaskIncludeLiteralsMode.All;
                    }
                    if (ab_IsRequired)
                    {
                        textBoxProperties.ValidationSettings.RequiredField.IsRequired = ab_IsRequired;
                        textBoxProperties.ValidationSettings.RequiredField.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                        textBoxProperties.ValidationSettings.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                    }
                    if (!string.IsNullOrWhiteSpace(as_ValidationEvent))
                    {
                        textBoxProperties.ValidationSettings.EnableCustomValidation = true;
                        textBoxProperties.ClientSideEvents.Validation = as_ValidationEvent;
                    }
    
                });
                return column;
            }
            public MVCxGridViewColumn AddBandDateEditorColumn(string as_FieldName, string as_Caption, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, string as_DisplayFormatString = "", string as_EditFormatString = "", DateTime? adt_MaxDate = null, DateTime? adt_MinDate = null, bool ab_IsRequired = false, string as_ValidationEvent = null, string as_DropDownEvent = null)
            {
                MVCxGridViewColumn column = new MVCxGridViewColumn();
                this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, as_DisplayFormatString, ab_IsRequired);
                column.ColumnType = MVCxGridViewColumnType.DateEdit;
                column.EditorProperties().DateEdit(dateEditProperties =>
                {
                    dateEditProperties.UseMaskBehavior = true;
                    if (adt_MinDate != null) dateEditProperties.MinDate = (DateTime)adt_MinDate;
                    if (adt_MaxDate != null) dateEditProperties.MaxDate = (DateTime)adt_MaxDate;
                    //dateEditProperties.EditFormat = EditFormat.Date;
                    dateEditProperties.EditFormatString = as_EditFormatString;
                    dateEditProperties.DisplayFormatInEditMode = true;
                    dateEditProperties.EditFormat = EditFormat.Custom;
                    dateEditProperties.AllowUserInput = true;
                    dateEditProperties.AllowNull = true;
                    dateEditProperties.DisplayFormatString = as_DisplayFormatString;
    
                    if (ab_IsRequired)
                    {
                        dateEditProperties.ValidationSettings.RequiredField.IsRequired = ab_IsRequired;
                        dateEditProperties.ValidationSettings.RequiredField.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                        dateEditProperties.ValidationSettings.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                    }
                    if (as_EditFormatString == Utils.GetFormatString.DateTimeEdit)
                    {
                        dateEditProperties.TimeSectionProperties.Visible = true;
                        dateEditProperties.TimeSectionProperties.TimeEditProperties.EditFormat = EditFormat.Custom;
                        dateEditProperties.TimeSectionProperties.ShowHourHand = true;
                        dateEditProperties.TimeSectionProperties.TimeEditProperties.EditFormatString = "HH:mm:ss";
                        dateEditProperties.CalendarProperties.FastNavProperties.EnablePopupAnimation = true;
                        dateEditProperties.ClientSideEvents.DropDown = as_DropDownEvent;
                        dateEditProperties.ClientSideEvents.CloseUp = "function(s,e){if(s.GetValue()==null||yyyy_MM_dd(s.GetValue(),'/')=='100/01/01') {s.GetTimeEdit().SetValue(null);s.SetValue(null);}}";
                        dateEditProperties.ClientSideEvents.ValueChanged = "function(s,e){if(s.GetValue()==null||yyyy_MM_dd(s.GetValue(),'/')=='100/01/01') {s.GetTimeEdit().SetValue(null);s.SetValue(null);}}";
                    }
                    if (!string.IsNullOrWhiteSpace(as_ValidationEvent))
                    {
                        dateEditProperties.ValidationSettings.EnableCustomValidation = true;
                        dateEditProperties.ClientSideEvents.Validation = as_ValidationEvent;
                    }
                });
                return column;
    
            }
            public MVCxGridViewColumn AddBandTimeEditorColumn(HtmlHelper helper, string as_FieldName, string as_Caption, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, string as_DisplayFormatString = "", string as_EditFormatString = "", bool ab_IsRequired = false, string as_ValidationEvent = null)
            {
                MVCxGridViewColumn column = new MVCxGridViewColumn();
                this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, as_DisplayFormatString, ab_IsRequired);
                column.EditorProperties().TextBox(textBoxProperties =>
                {
                    textBoxProperties.MaxLength = 5;
    
                    textBoxProperties.MaskSettings.Mask = "00:00";
                    textBoxProperties.MaskSettings.IncludeLiterals = MaskIncludeLiteralsMode.All;
                    if (ab_IsRequired)
                    {
                        textBoxProperties.ValidationSettings.RequiredField.IsRequired = ab_IsRequired;
                        textBoxProperties.ValidationSettings.RequiredField.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                        textBoxProperties.ValidationSettings.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                    }
                    if (!string.IsNullOrWhiteSpace(as_ValidationEvent))
                    {
                        textBoxProperties.ValidationSettings.EnableCustomValidation = true;
                        textBoxProperties.ClientSideEvents.Validation = as_ValidationEvent;
                    }
                });
                return column;
            }
            public MVCxGridViewColumn AddBandComboboxColumn(string as_FieldName, string as_Caption, object ao_Model, string as_ValueFieldName, string as_TextFieldName, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, bool ab_IsRequired = false, string as_ValidationEvent = null, string as_SelectChangedEvent = null, string as_Type = "Int", object ao_CallbackRouteValues = null, string as_BeginCallback = null, string as_EndCallback = null)
            {
                MVCxGridViewColumn column = new MVCxGridViewColumn();
                this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, ab_IsRequired: ab_IsRequired);
    
                column.ColumnType = MVCxGridViewColumnType.ComboBox;
                column.EditorProperties().ComboBox(comboBoxProperties =>
                {
                    comboBoxProperties.TextField = as_TextFieldName;
                    comboBoxProperties.ValueField = as_ValueFieldName;
                    comboBoxProperties.ValueType = as_Type == "Int" ? typeof(int) : typeof(string);
                    comboBoxProperties.DataSource = ao_Model;
                    if (ao_CallbackRouteValues != null) comboBoxProperties.CallbackRouteValues = ao_CallbackRouteValues;
                    if (as_BeginCallback != null) comboBoxProperties.ClientSideEvents.BeginCallback = as_BeginCallback;
                    if (as_EndCallback != null) comboBoxProperties.ClientSideEvents.EndCallback = as_EndCallback;
                    if (ab_IsRequired)
                    {
                        comboBoxProperties.ValidationSettings.RequiredField.IsRequired = ab_IsRequired;
                        comboBoxProperties.ValidationSettings.RequiredField.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                        comboBoxProperties.ValidationSettings.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                        //if (!string.IsNullOrWhiteSpace(as_SelectChangedEvent))
                        //{
                        //    comboBoxProperties.ClientSideEvents.SelectedIndexChanged = as_SelectChangedEvent;
                        //}
                    }
                    if (!string.IsNullOrWhiteSpace(as_ValidationEvent))
                    {
                        comboBoxProperties.ValidationSettings.EnableCustomValidation = true;
                        comboBoxProperties.ClientSideEvents.Validation = as_ValidationEvent;
    
                    }
                    if (!string.IsNullOrWhiteSpace(as_SelectChangedEvent))
                    {
                        comboBoxProperties.ClientSideEvents.SelectedIndexChanged = as_SelectChangedEvent;
                    }
                    comboBoxProperties.EnableSynchronization = DefaultBoolean.True;
                });
                return column;
            }
            public MVCxGridViewColumn AddBandHyperlinkColumn(string as_FieldName, string as_Caption, string as_urlFormatString, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, bool ab_IsRequired = false, string as_ValidationEvent = null)
            {
                MVCxGridViewColumn column = new MVCxGridViewColumn();
                this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, ab_IsRequired: ab_IsRequired);
    
                column.ColumnType = MVCxGridViewColumnType.HyperLink;
                column.EditorProperties().HyperLink(hyperLinkProperties =>
                {
                    hyperLinkProperties.NavigateUrlFormatString = HttpUtility.UrlDecode(as_urlFormatString);
                    hyperLinkProperties.TextField = as_FieldName;
                    hyperLinkProperties.Target = "_blank";
                });
                return column;
            }
            public MVCxGridViewColumn AddBandMapHyperlinkColumn(HtmlHelper helper, string as_FieldName, string as_Caption, string as_urlFormatString, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, string as_DisplayFormatString = null, bool ab_IsRequired = false, string as_ValidationEvent = null, string as_LatFieldName = "", string as_LngFieldName = "")
            {
                MVCxGridViewColumn column = new MVCxGridViewColumn();
                this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, ab_IsRequired: ab_IsRequired, as_DisplayFormatString: as_DisplayFormatString);
                column.ColumnType = MVCxGridViewColumnType.HyperLink;
                column.SetDataItemTemplateContent(container =>
                {
                    if (container.VisibleIndex >= 0)
                    {
                        helper.DevExpress().HyperLink(hyperLinkProperties =>
                        {
                            var ls_KeyValue = container.KeyValue;
                            if (DataBinder.Eval(container.DataItem, as_FieldName) != DBNull.Value && DataBinder.Eval(container.DataItem, as_FieldName).ToString() != "")
                                if (as_DisplayFormatString == Utils.GetFormatString.DateTimeDisplay)
                                    hyperLinkProperties.Properties.Text = Convert.ToDateTime(DataBinder.Eval(container.DataItem, as_FieldName).ToString()).ToString(Utils.GetFormatString.DateTimeDisplay);
                                else
                                    hyperLinkProperties.Properties.Text = DataBinder.Eval(container.DataItem, as_FieldName).ToString();
                            hyperLinkProperties.Name = "lnk_" + as_FieldName + ls_KeyValue + Utils.GenerateRandom(4);
                            hyperLinkProperties.Properties.NavigateUrlFormatString = HttpUtility.UrlDecode(String.Format(as_urlFormatString, DataBinder.Eval(container.DataItem, as_LatFieldName), DataBinder.Eval(container.DataItem, as_LngFieldName)));
                            hyperLinkProperties.Properties.TextField = as_FieldName;
                            hyperLinkProperties.Properties.ClientSideEvents.Click = "function(s,e){window.open('" + hyperLinkProperties.Properties.NavigateUrlFormatString + "', '_blank')}";
                            hyperLinkProperties.Properties.Target = "_blank";
                        }).Render();
                    }
                    else
                    {
                        if (DataBinder.Eval(container.DataItem, as_FieldName) != null)
                            helper.ViewContext.Writer.Write(DataBinder.Eval(container.DataItem, as_FieldName).ToString());
                    }
                });
                return column;
            }
            public MVCxGridViewColumn AddBandMemoColumn(string as_FieldName, string as_Caption, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, bool ab_IsRequired = false, string as_ValidationEvent = null)
            {
                MVCxGridViewColumn column = new MVCxGridViewColumn();
                this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, ab_IsRequired: ab_IsRequired);
    
                column.ColumnType = MVCxGridViewColumnType.Memo;
                column.EditorProperties().Memo(memoProperties =>
                {
                    if (ab_IsRequired)
                    {
                        memoProperties.ValidationSettings.RequiredField.IsRequired = ab_IsRequired;
                        memoProperties.ValidationSettings.RequiredField.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                        memoProperties.ValidationSettings.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                    }
                    if (!string.IsNullOrWhiteSpace(as_ValidationEvent))
                    {
                        memoProperties.ValidationSettings.EnableCustomValidation = true;
                        memoProperties.ClientSideEvents.Validation = as_ValidationEvent;
                    }
                });
                return column;
            }
            public MVCxGridViewColumn AddBandCheckBoxColumn(string as_FieldName, string as_Caption, object ao_ValueChecked, object ao_ValueUnchecked, Type ao_ValueType, string as_ValueCheckedString, string as_ValueUncheckedString, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, bool ab_IsRequired = false, string as_ValidationEvent = null)
            {
                MVCxGridViewColumn column = new MVCxGridViewColumn();
                this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, ab_IsRequired: ab_IsRequired);
    
                column.ColumnType = MVCxGridViewColumnType.CheckBox;
                var checkBoxProperties = column.PropertiesEdit as CheckBoxProperties;
                checkBoxProperties.ValueChecked = ao_ValueChecked;
                checkBoxProperties.ValueUnchecked = ao_ValueUnchecked;
                checkBoxProperties.ValueType = ao_ValueType;
                checkBoxProperties.ValueCheckedString = as_ValueCheckedString;
                checkBoxProperties.ValueUncheckedString = as_ValueUncheckedString;
                return column;
            }
            public MVCxGridViewColumn AddBandCheckBoxColumnWithinHeader(HtmlHelper helper, string as_FieldName, string as_Caption, object ao_ValueChecked, object ao_ValueUnchecked, Type ao_ValueType, string as_ValueCheckedString, string as_ValueUncheckedString, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, bool ab_IsRequired = false, string as_ValidationEvent = null)
            {
                MVCxGridViewColumn column = new MVCxGridViewColumn();
                this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, ab_IsRequired: ab_IsRequired);
                column.SetHeaderTemplateContent(c =>
                {
                    helper.DevExpress().CheckBox(chkSettings =>
                    {
                        chkSettings.Text = as_Caption;
                        chkSettings.Name = "chk" + this._Settings.Name + as_FieldName + "_SelectAll";
                        chkSettings.ControlStyle.Font.Underline = false;
                        chkSettings.Width = Unit.Percentage(100);
                        chkSettings.ControlStyle.HorizontalAlign = HorizontalAlign.Center;
                        chkSettings.Properties.ClientSideEvents.CheckedChanged = "function (s,e){ On" + chkSettings.Name + "(s,e);}";
                    }).Render();
                });
                column.ColumnType = MVCxGridViewColumnType.CheckBox;
                var checkBoxProperties = column.PropertiesEdit as CheckBoxProperties;
                checkBoxProperties.ValueChecked = ao_ValueChecked;
                checkBoxProperties.ValueUnchecked = ao_ValueUnchecked;
                checkBoxProperties.ValueType = ao_ValueType;
                checkBoxProperties.ValueCheckedString = as_ValueCheckedString;
                checkBoxProperties.ValueUncheckedString = as_ValueUncheckedString;
                column.Settings.AllowSort = DefaultBoolean.False;
    
                return column;
            }
            public MVCxGridViewColumn AddBandHyperlinkDynamicClientSideColumn(string as_FieldName, string as_Caption, HtmlHelper helper, string[] aa_DataFieldName, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, string as_DisplayFormatString = null, string as_ClientSideEventName = null)
            {
                MVCxGridViewColumn column = new MVCxGridViewColumn();
                this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible);
                column.SetDataItemTemplateContent(container =>
                {
                    if (container.VisibleIndex < 0)
                        return;
    
                    object[] la_DataValue = new object[aa_DataFieldName.Length];
                    bool lb_Valid = true;
                    string ls_ValueString = "";
                    for (int i = 0; i < aa_DataFieldName.Length; i++)
                    {
                        if (!string.IsNullOrWhiteSpace(aa_DataFieldName[i]))
                        {
                            la_DataValue[i] = DataBinder.Eval(container.DataItem, aa_DataFieldName[i]);
    
                        }
                    }
                    for (int i = 0; i < la_DataValue.Length; i++)
                    {
                        if (la_DataValue[i] == null)
                        {
                            lb_Valid = false;
                        }
                        else
                        {
                            ls_ValueString = ls_ValueString + "'" + (la_DataValue[i] == DBNull.Value ? "" : la_DataValue[i].ToString()) + "',";
    
    
                        }
                    }
    
                    if (lb_Valid)
                    {
    
                        if (ls_ValueString != "")
                        {
    
                            ls_ValueString = ls_ValueString.Substring(0, ls_ValueString.Length - 1);
                            if (ls_ValueString != "''")
                            {
                                helper.DevExpress().HyperLink(hyperlink =>
                                {
                                    var ls_KeyValue = container.KeyValue;
                                    hyperlink.Name = "lnk_" + as_FieldName + ls_KeyValue + Utils.GenerateRandom(4);
                                    if (as_DisplayFormatString == Utils.GetFormatString.DateDisplay)
                                        hyperlink.Properties.Text = Convert.ToDateTime(DataBinder.Eval(container.DataItem, as_FieldName).ToString()).ToString(Utils.GetFormatString.DateDisplay);
                                    else
                                        hyperlink.Properties.Text = DataBinder.Eval(container.DataItem, as_FieldName).ToString();
                                    hyperlink.Properties.TextField = as_FieldName;
                                    hyperlink.Properties.ClientSideEvents.Click = "function (s,e){ " + as_ClientSideEventName + "(" + ls_ValueString + ");}";
                                    hyperlink.Properties.Target = "_blank";
                                }).Render();
                            }
                            else
                            {
                                helper.ViewContext.Writer.Write("");
                            }
                        }
                    }
                    else
                    {
                        if (DataBinder.Eval(container.DataItem, as_FieldName) != null)
                            helper.ViewContext.Writer.Write(DataBinder.Eval(container.DataItem, as_FieldName).ToString());
    
                    }
    
    
                });
    
                return column;
            }
            public MVCxGridViewColumn AddBandNumberColumn(HtmlHelper helper, string as_FieldName, string as_Caption, int ai_Width = 0, bool ab_Editable = false, bool ab_EditFormSettingsVisible = false, string as_DisplayFormatString = "", SpinEditNumberType ao_NumberType = SpinEditNumberType.Float, float? afl_MinValue = null, float? afl_MaxValue = null, bool ab_IsRequired = false, string as_ValidationEvent = null, DevExpress.Data.SummaryItemType ao_SummaryType = DevExpress.Data.SummaryItemType.None, bool ab_IsRealTimeCalTotalSum = false)
            {
                MVCxGridViewColumn column = new MVCxGridViewColumn();
                this.CommonColumnSetting(column, as_FieldName, as_Caption, ai_Width, ab_Editable, ab_EditFormSettingsVisible, as_DisplayFormatString, ab_IsRequired: ab_IsRequired);
    
                column.ColumnType = MVCxGridViewColumnType.TextBox;
                column.HeaderStyle.HorizontalAlign = HorizontalAlign.Right;
                column.CellStyle.HorizontalAlign = HorizontalAlign.Right;
                column.UnboundType = DevExpress.Data.UnboundColumnType.Decimal;
                column.EditorProperties().SpinEdit(spinEditProperties =>
                {
                    spinEditProperties.NumberFormat = SpinEditNumberFormat.Custom;
                    spinEditProperties.DisplayFormatString = as_DisplayFormatString;
                    spinEditProperties.DisplayFormatInEditMode = true;
                    spinEditProperties.NumberType = ao_NumberType;
    
                        //spinEditProperties.AllowNull = false;
                        spinEditProperties.SpinButtons.Visible = false;
                    spinEditProperties.SpinButtons.ShowLargeIncrementButtons = false;
                    spinEditProperties.SpinButtons.ShowIncrementButtons = false;
                    spinEditProperties.Increment = 0;
                    spinEditProperties.AllowMouseWheel = false;
                    if (afl_MinValue != null) spinEditProperties.MinValue = (decimal)afl_MinValue;
                    if (afl_MaxValue != null) spinEditProperties.MaxValue = (decimal)afl_MaxValue;
                    if (ab_IsRequired)
                    {
                        spinEditProperties.ValidationSettings.RequiredField.IsRequired = ab_IsRequired;
                        spinEditProperties.ValidationSettings.RequiredField.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                        spinEditProperties.ValidationSettings.ErrorText = Utils.GetMessage("1001", "[" + Utils.GenerateJson("1", Utils.GetTranslation(as_Caption), "String") + Utils.GenerateJson("2", " ", "String").Remove(Utils.GenerateJson("2", " ", "String").Length - 1) + "]");
                    }
                    if (!string.IsNullOrWhiteSpace(as_ValidationEvent))
                    {
                        spinEditProperties.ValidationSettings.EnableCustomValidation = true;
                        spinEditProperties.ClientSideEvents.Validation = as_ValidationEvent;
                    }
                });
                if (ab_IsRealTimeCalTotalSum)
                {
                    ASPxSummaryItem summaryItem = new ASPxSummaryItem(column.FieldName, DevExpress.Data.SummaryItemType.Sum);
                    summaryItem.Tag = "SummaryItem_Sum_" + column.FieldName;
                    this._Settings.TotalSummary.Add(summaryItem);
                    column.SetFooterTemplateContent(c =>
                    {
    
                        helper.DevExpress().Label(lbSettings =>
                        {
                            string fieldName = (c.Column as GridViewDataColumn).FieldName;
                                //c.data
                                lbSettings.Name = "lbl_Sum_" + fieldName;
                            lbSettings.Properties.EnableClientSideAPI = true;
                            ASPxSummaryItem summaryItem1 = c.Grid.TotalSummary.First(i => i.Tag == ("SummaryItem_Sum_" + fieldName));
                            lbSettings.Text = string.Format("{0:" + as_DisplayFormatString + "}", (c.Grid.GetTotalSummaryValue(summaryItem1) ?? 0));
    
                        }).Render();
                    });
                }
                this._Settings.TotalSummary.Add(ao_SummaryType, as_FieldName).DisplayFormat = as_DisplayFormatString;
                return column;
            }
            
            #endregion
        }
    }
    

      

  • 相关阅读:
    MySQL存储过程参数【4】
    MySQL存储过程的变量【3】
    MySQL存储过程入门【2】
    MySQL存储过程简介【1】
    MySQL删除重复行的方式
    在MySQL单个表中找到重复的值
    MySQL比较两个表不同的数据
    【思维】P5743 【深基7.习8】猴子吃桃——有趣的解法,归纳推导
    对判断质数的算法的优化
    【思维】P1321 单词覆盖还原
  • 原文地址:https://www.cnblogs.com/hesijian/p/12426907.html
Copyright © 2020-2023  润新知