给datagridview添加一个进度条类型的可以拖拽列

1.新建一个类:(完整代码)

using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace winclient
{
    public partial class progressEdit:TrackBar,IDataGridViewEditingControl
    {
        private DataGridView datagrid;
        private bool isChange = false;
        private int rowindex;

        public progressEdit():base()
        {
            InitializeComponent();
            this.Minimum = 0;
            this.Maximum = 100;
        }

        public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle)
        {
            if (Value == 100)
                BackColor = Color.Green;
            else
                BackColor = dataGridViewCellStyle.BackColor;
        }

        public DataGridView EditingControlDataGridView
        {
            get
            {
                return datagrid;
            }
            set
            {
                datagrid = value;
            }
        }

        public object EditingControlFormattedValue
        {
            get
            {
                return Value;
            }
            set
            {
                this.Value=(int)value;
            }
        }

        public int EditingControlRowIndex
        {
            get
            {
                return rowindex;
            }
            set
            {
                rowindex = value;
            }
        }

        public bool EditingControlValueChanged
        {
            get
            {
                return isChange;
            }
            set
            {
                isChange = value;
            }
        }

        public bool EditingControlWantsInputKey(Keys keyData, bool dataGridViewWantsInputKey)
        {
            switch (keyData & Keys.KeyCode)
            {
                case Keys.Left:
                case Keys.Up:
                case Keys.Down:
                case Keys.Right:
                case Keys.Home:
                case Keys.End:
                    return true;
                default:
                    return false;
            }
        }

        public Cursor EditingPanelCursor
        {
            get { return base.Cursor; }
        }

        public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context)
        {
            return EditingControlFormattedValue;
        }

        public void PrepareEditingControlForEdit(bool selectAll)
        {
            
        }

        public bool RepositionEditingControlOnValueChange
        {
            get { return false; }
        }

        protected override void OnValueChanged(EventArgs e)
        {
            isChange = true;
            EditingControlDataGridView.NotifyCurrentCellDirty(true);
            base.OnValueChanged(e);
        }

        private void initComponent()
        {
            ((ISupportInitialize)(this)).BeginInit();
            this.SuspendLayout();
            this.AutoSize = false;
            this.Dock = DockStyle.Fill;
            this.TickStyle = TickStyle.TopLeft;
            ((ISupportInitialize)(this)).EndInit();
            this.ResumeLayout(false);
        }
    }
}

 

2.定义单元格:(完整代码)

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace winclient
{
    class progresscell:DataGridViewTextBoxCell
    {
        private progressEdit pre;

        public progresscell(): base()        
        { }

        public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
        {
            base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
            pre = DataGridView.EditingControl as progressEdit;
            pre.Value = Convert.ToInt32(this.Value);
        }

        public override Type EditType
        {
            get
            {
                return typeof(progressEdit);
            }
        }

        public override Type ValueType
        {
            get
            {
                return typeof(int);
            }
        }

        public override Type FormattedValueType
        {
            get
            {
                return typeof(int);
            }
        }

        protected override object GetFormattedValue(object value, int rowIndex, ref DataGridViewCellStyle cellStyle, System.ComponentModel.TypeConverter valueTypeConverter, System.ComponentModel.TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context)
        {
            return base.GetFormattedValue(value, rowIndex, ref cellStyle, valueTypeConverter, formattedValueTypeConverter, context).ToString();
        }

        protected override object GetValue(int rowIndex)
        {
            int value = (int)base.GetValue(rowIndex);
            return value;
        }

        public override object DefaultNewRowValue
        {
            get
            {
                return 0;
            }
        }
    }
}

 

3.定义列:(完整代码)

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace winclient
{
    class progresscolumn:DataGridViewColumn
    {
        public progresscolumn(): base(new progresscell())
        { }

        public override DataGridViewCell CellTemplate
        {
            get
            {
                return base.CellTemplate;
            }
            set
            {
                if (value != null && !value.GetType().IsAssignableFrom(typeof(progresscell)))
                    throw new InvalidCastException("列中只能使用滑动条单元格");
                base.CellTemplate = value;
            }
        }
    }
}
posted @ 2010-08-26 21:03  何苦上青天  Views(1091)  Comments(0Edit  收藏  举报