martes, 18 de diciembre de 2012

DataGridViewTextEditorColumn (III Parte)

Continuando con el articulo, ahora veremos la clase DataGridViewTextEditorColumn, esta clase hereda de DataGridViewColumn y le he agregado dos propiedades para nuestro propósito  ShowButtonMode y ColumnEditor, esta ultima propiedad es del tipo RepositoryTextEditor.

Los valores para ShowButtonMode son:
  • Always: Indica que los botones de la celda siempre estaran visibles.
  • FocusedRow: Indica que los botones solo se mostraran en la fila activa en el momento.
  • FocusedCell: Indica que los botones solo se mostraran en la celda activa en el momento.
Veamos el código:
 
[ToolboxBitmap(typeof(System.Windows.Forms.TextBox))]
public class DataGridViewTextEditorColumn : DataGridViewColumn
{
    private ShowButtonMode showButtonMode;
    private RepositoryTextEditor repositoryTextEditor;
    private IDesignerHost IDesignerHost
    {
        get
        {
            return this.DataGridView.Site.GetService(typeof(IDesignerHost)) as IDesignerHost;
        }
    }
    
    // Crea el editor de la celda en caso de no existir, en caso de existir
    // se estable el DataGridView que contiene la columna.
    private void CreateColumnEditor()
    {
        if (this.DataGridView == null || this.repositoryTextEditor != null)
        {
            if (this.repositoryTextEditor != null)
                this.repositoryTextEditor.DataGridViewOwner = this.DataGridView;
            return;
        }

        IDesignerHost host = this.IDesignerHost;
        this.ColumnEditor = host.CreateComponent(typeof(RepositoryTextEditor)) as RepositoryTextEditor;
        this.ColumnEditor.DataGridViewOwner = this.DataGridView;
    }
    public DataGridViewTextEditorColumn() : base(new DataGridViewTextEditorCell())
    {
        this.showButtonMode = ShowButtonMode.Always;
    }

    [DefaultValue(typeof(ShowButtonMode), "Always")]
    public ShowButtonMode ShowButtonMode
    {
        get { return this.showButtonMode; }
        set
        {
            this.showButtonMode = value;
        }
    }
    public RepositoryTextEditor ColumnEditor
    {
        get
        {
            this.CreateColumnEditor();
            return this.repositoryTextEditor;
        }
        set 
        { 
            this.repositoryTextEditor = value;
            if (this.DataGridView != null)
                this.DataGridView.Invalidate();
        }
    }
    public override DataGridViewCell CellTemplate
    {
        get
        {
            return base.CellTemplate;
        }
        set
        {
            if (value != null && !value.GetType().IsAssignableFrom(typeof(DataGridViewTextEditorCell)))
            {
                throw new InvalidCastException("Must be a DataGridViewTextEditorCell");
            }
            base.CellTemplate = value;
        }
    }

    public override object Clone()
    {
        DataGridViewTextEditorColumn clone = base.Clone() as DataGridViewTextEditorColumn;
        clone.ColumnEditor = this.ColumnEditor;
        clone.ShowButtonMode = this.ShowButtonMode;

        return clone;
    }
}
 
y el código de ShowButtonMode:
 
public enum ShowButtonMode
{
    Always,
    FocusedRow,
    FocusedCell
}
 

DataGridViewTextEditorColumn (II Parte)
DataGridViewTextEditorColumn (IV Parte)