/// <summary>
        /// Assign a column definition to one or more columns.
        /// </summary>
        /// <returns></returns>
        public GridColumnsBuilder TargetAll()
        {
            GridColumnsBuilder column = new GridColumnsBuilder();

            targets.Add(new ColumnDefsTargets("\"_all\"", column));
            return(column);
        }
        /// <summary>
        /// Assign a column definition to one or more columns.
        /// </summary>
        /// <param name="columnIndex"></param>
        /// <returns></returns>
        public GridColumnsBuilder Targets(int columnIndex)
        {
            GridColumnsBuilder column = new GridColumnsBuilder();

            targets.Add(new ColumnDefsTargets(columnIndex.ToString(), column));
            return(column);
        }
        /// <summary>
        /// Assign a column definition to one or more columns.
        /// </summary>
        /// <param name="columnsIndex"></param>
        /// <returns></returns>
        public GridColumnsBuilder Targets(int[] columnsIndex)
        {
            GridColumnsBuilder column = new GridColumnsBuilder();

            targets.Add(new ColumnDefsTargets($"[{string.Join(",",columnsIndex)}]", column));
            return(column);
        }
        /// <summary>
        /// Assign a column definition to one or more columns.
        /// </summary>
        /// <param name="className"></param>
        /// <returns></returns>
        public GridColumnsBuilder Targets(string className)
        {
            GridColumnsBuilder column = new GridColumnsBuilder();

            targets.Add(new ColumnDefsTargets($"\"{className}\"", column));
            return(column);
        }
        /// <summary>
        /// Add a column to the factory
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public GridColumnsBuilder Add <T>()
        {
            GridColumnsBuilder column = new GridColumnsBuilder();

            this.Columns.Add(column);
            return(column);
        }
        /// <summary>
        /// Add a column to the factory
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        public GridColumnsBuilder Add <T>(Expression <Func <TModel, T> > expression)
        {
            var    p     = PropertyBuilder.GetPropertyInfo(expression);
            string pName = PropertyBuilder.GetPropertyName(p);

            GridColumnsBuilder column = new GridColumnsBuilder();

            this.Columns.Add(column.Data(pName));
            return(column);
        }
        /// <summary>
        /// Add a column to the factory
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="propertyName"></param>
        /// <returns></returns>
        public GridColumnsBuilder Add <T>(string propertyName)
        {
            if (string.IsNullOrEmpty(propertyName))
            {
                throw new ArgumentNullException(nameof(propertyName));
            }
            GridColumnsBuilder column = new GridColumnsBuilder();

            this.Columns.Add(column.Data(propertyName));
            return(column);
        }
 /// <summary>
 /// Initialize a new instance of <see cref="ColumnDefsTargets"/>
 /// </summary>
 /// <param name="target"></param>
 /// <param name="column"></param>
 public ColumnDefsTargets(string target, GridColumnsBuilder column)
 {
     this.target = target;
     this.column = column;
 }