public ControlGridFormColumn AddColumn(Expression <Func <TModel, dynamic> > expression)
        {
            var column = new ControlGridFormColumn(expression);

            columns.Add(column);
            return(column);
        }
        public ControlGridFormColumn <TModel> AddColumn(string columnName)
        {
            var column = new ControlGridFormColumn <TModel> {
                PropertyName = columnName
            };

            columns.Add(column);
            return(column);
        }
        public ControlGridFormColumn <TModel> AddColumn <TValue>(Expression <Func <TModel, TValue> > expression, string headerText)
        {
            var column = new ControlGridFormColumn <TModel>();

            column.SetValueGetter(expression.Compile());

            if (!string.IsNullOrEmpty(headerText))
            {
                column.HeaderText = headerText;
            }
            else
            {
                var modelMetadata = ModelMetadata.FromLambdaExpression(expression, new ViewDataDictionary <TModel>());
                column.HeaderText = modelMetadata.DisplayName ?? modelMetadata.PropertyName;
            }
            column.PropertyName = Utils.GetFullPropertyName(expression);
            column.PropertyType = typeof(TValue);

            columns.Add(column);
            return(column);
        }