///  <summary>
        ///  Regular columns but with an image.
        ///  </summary>
        public OLVColumn CreateImageColumn <TImageKey>(
            string headerText,
            Func <TRow, IComparable> getSortValue,
            Func <TRow, TImageKey> funcThatRetunsImageListKeyString,
            Func <TImageKey, Image> getImage,
            bool cacheImagesInImageList,
            ColumnRenderType columnType = ColumnRenderType.Default)
        {
            var col = CreateColumn(headerText, getSortValue, null, columnType);

            col.ImageGetter = x =>
            {
                try
                {
                    TImageKey imageKey = funcThatRetunsImageListKeyString((TRow)x);

                    if (cacheImagesInImageList)
                    {
                        return(GetImageName(imageKey, () => getImage(imageKey)));
                    }

                    return(getImage(imageKey));
                }
                catch
                {
                    return(null);
                }
            };

            col.AspectToStringConverter = x => string.Empty; // do not show string
            return(col);
        }
        /// <summary>
        /// Create a standard column.
        /// </summary>
        public OLVColumn CreateColumn <TColumn>(
            string headerText,
            Func <TRow, TColumn> getValue,
            Func <TColumn, string> valueToString,
            ColumnRenderType columnType = ColumnRenderType.Default)
        {
            OLVColumn column = new OLVColumn
            {
                AspectGetter = rowObject =>
                {
                    try
                    {
                        return(getValue((TRow)rowObject));
                    }
                    catch
                    {
                        return(null);
                    }
                },
                Text = headerText,
                Tag  = _gridHelper
            };

            if (valueToString != null)
            {
                column.AspectToStringConverter = rowObject => rowObject == null ? "(NULL)" : valueToString((TColumn)rowObject);
            }

            _columns.Add(new ObjColumn(columnType));
            _grid.AllColumns.Add(column);
            return(column);
        }
 /// <summary>
 /// Create a standard column.
 /// </summary>
 public OLVColumn CreateColumn(
     string headerText,
     Func <TRow, string> getValue,
     ColumnRenderType columnType = ColumnRenderType.Default)
 {
     return(CreateColumn(headerText, getValue, null, columnType));
 }
        /*
         * how to use!
         *   private GridImageKind EnabledImageGetter(object rowObject)
         *  {
         *      return ((Analyzer)rowObject).Enabled ? GridImageKind.check : GridImageKind.cross;
         *  }
         *   var EnabledImages = new List<GridImageKind>() {GridImageKind.check,GridImageKind.cross};
         *  _gridHelper.CreateImageColumn(x => x.Enabled, EnabledImageGetter, EnabledImages, "Enabled");
         */

        ///  <summary>
        ///  Regular columns but with an image.
        ///
        ///  </summary>
        /// <param name="getSortValue"></param>
        /// <param name="headerText"></param>
        /// <param name="columnType"></param>
        /// <param name="getRowImage">a function that returns a key as string in your image list but as object</param>
        public OLVColumn CreateImageColumn(
            string headerText,
            Func <TRow, IComparable> getSortValue,
            Func <TRow, GridImageKind> getRowImage,
            ColumnRenderType columnType = ColumnRenderType.Default)
        {
            return(CreateImageColumn(
                       headerText,
                       getSortValue,
                       getRowImage,
                       GridImageHelper.GetImage,
                       true,
                       columnType));
        }
        /// <summary>
        /// Basic column but with something that looks like a hyperlink.
        /// <para>you decide what you want to happen.</para>
        /// </summary>
        public OLVColumn CreateHyperlinkColumn(
            string headerText,
            Func <TRow, string> getValue,
            Action <TRow> onClicked,
            ColumnRenderType columnType = ColumnRenderType.Default)
        {
            var column = CreateColumn(headerText, getValue, null, columnType);

            _grid.UseHyperlinks = true;
            column.Hyperlink    = true;
            EventHandler <HyperlinkClickedEventArgs> gridOnHyperlinkClicked = (sender, args) =>
            {
                if (args.Column.Text.Equals(column.Text))
                {
                    onClicked((TRow)args.Model);
                }
                args.Handled = true;    //disables the process start default process
            };

            _grid.HyperlinkClicked += gridOnHyperlinkClicked;
            _gridHelper.AddDisposedAction(() => _grid.HyperlinkClicked -= gridOnHyperlinkClicked);
            return(column);
        }
        /// <summary>
        /// Regular columns but with a checkbox.
        /// </summary>
        public OLVColumn CreateCheckboxColumn(string headerText, Func <TRow, string> getValue, ColumnRenderType columnType = ColumnRenderType.Default)
        {
            var col = CreateColumn(headerText, getValue, null, columnType);

            col.CheckBoxes         = true;
            col.TriStateCheckBoxes = true;
            col.FillsFreeSpace     = false;
            var size = _grid.Font.GetTextSize(headerText);

            col.Width = (int)size.Width + _grid.Margin.Left + _grid.Margin.Right;
            return(col);
        }
 public ObjColumn(ColumnRenderType columnRenderType)
 {
     ColumnRenderType = columnRenderType;
 }