最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

[WinForm]DataGridView中使DataGridViewComboBox可编辑C

来源:动视网 责编:小OO 时间:2025-09-24 10:50:58
文档

[WinForm]DataGridView中使DataGridViewComboBox可编辑C

C#][WinForm]DataGridView中使DataGridViewComboBox可编辑2009年04月28日星期二14:56第一步,新建窗体,放置一个DataGridView控件第二步,在Form1相同命名空间中加入以下两个类//要加入的类publicclassDataGridViewComboEditBoxColumn:DataGridViewComboBoxColumn{   publicDataGridViewComboEditBoxColumn()   {       Da
推荐度:
导读C#][WinForm]DataGridView中使DataGridViewComboBox可编辑2009年04月28日星期二14:56第一步,新建窗体,放置一个DataGridView控件第二步,在Form1相同命名空间中加入以下两个类//要加入的类publicclassDataGridViewComboEditBoxColumn:DataGridViewComboBoxColumn{   publicDataGridViewComboEditBoxColumn()   {       Da
C#][WinForm]DataGridView中使DataGridViewComboBox可编辑

2009年04月28日 星期二 14:56

第一步,新建窗体,放置一个DataGridView控件

第二步,在Form1相同命名空间中加入以下两个类

//要加入的类

public class DataGridViewComboEditBoxColumn : DataGridViewComboBoxColumn

{

    public DataGridViewComboEditBoxColumn()

    {

        DataGridViewComboEditBoxCell obj = new DataGridViewComboEditBoxCell();

        this.CellTemplate = obj;

    }

}

//要加入的类

public class DataGridViewComboEditBoxCell : DataGridViewComboBoxCell

{

    public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)

    {

        base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);

        ComboBox comboBox = (ComboBox)base.DataGridView.EditingControl;

        if (comboBox != null)

        {

            comboBox.DropDownStyle = ComboBoxStyle.DropDown;

            comboBox.AutoCompleteMode = AutoCompleteMode.Suggest;

            comboBox.Validating += new CancelEventHandler(comboBox_Validating);

        }

    }

    protected override object GetFormattedValue(object value, int rowIndex, ref DataGridViewCellStyle cellStyle, TypeConverter valueTypeConverter, TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context)

    {

        if (value != null)

        {

            if (value.ToString().Trim() != string.Empty)

            {

                if (Items.IndexOf(value) == -1)

                {

                    Items.Add(value);

                    DataGridViewComboBoxColumn col = (DataGridViewComboBoxColumn)OwningColumn;

                    col.Items.Add(value);

                }

            }

        }

        return base.GetFormattedValue(value, rowIndex, ref cellStyle, valueTypeConverter, formattedValueTypeConverter, context);

    }

    void comboBox_Validating(object sender, System.ComponentModel.CancelEventArgs e)

    {

        DataGridViewComboBoxEditingControl cbo = (DataGridViewComboBoxEditingControl)sender;

        if (cbo.Text.Trim() == string.Empty) return;

        DataGridView grid = cbo.EditingControlDataGridView;

        object value = cbo.Text;

        // Add value to list if not there

        if (cbo.Items.IndexOf(value) == -1)

        {

            DataGridViewComboBoxColumn cboCol = (DataGridViewComboBoxColumn)grid.Columns[grid.CurrentCell.ColumnIndex];

            // Must add to both the current combobox as well as the template, to avoid duplicate entries

            cbo.Items.Add(value);

            cboCol.Items.Add(value);

            grid.CurrentCell.Value = value;

        }

    }

}

//添加完这两个类后,右键项目生成一次。

第三步,为DataGridView添加列,类型选“DataGridViewComboEditBoxColumn ”,上面那个类的名字

上面已经基本完成,为了演示效果,请继续向下看!

第四步,在FormLoad事件中加入下面代码

        private void Form1_Load(object sender, EventArgs e)

        {

            this.Column1.Items.AddRange(new string[] { "aaa", "bbb", "ccc" });

        }

最终效果:

完成代码:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace WindowsApplication1

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            this.Column1.Items.AddRange(new string[] { "aaa", "bbb", "ccc" });

        }

    }

    public class DataGridViewComboEditBoxColumn : DataGridViewComboBoxColumn

    {

        public DataGridViewComboEditBoxColumn()

        {

            DataGridViewComboEditBoxCell obj = new DataGridViewComboEditBoxCell();

            this.CellTemplate = obj;

        }

    }

    public class DataGridViewComboEditBoxCell : DataGridViewComboBoxCell

    {

        public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)

        {

            base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);

            ComboBox comboBox = (ComboBox)base.DataGridView.EditingControl;

            if (comboBox != null)

            {

                comboBox.DropDownStyle = ComboBoxStyle.DropDown;

                comboBox.AutoCompleteMode = AutoCompleteMode.Suggest;

                comboBox.Validating += new CancelEventHandler(comboBox_Validating);

            }

        }

        protected override object GetFormattedValue(object value, int rowIndex, ref DataGridViewCellStyle cellStyle, TypeConverter valueTypeConverter, TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context)

        {

            if (value != null)

            {

                if (value.ToString().Trim() != string.Empty)

                {

                    if (Items.IndexOf(value) == -1)

                    {

                        Items.Add(value);

                        DataGridViewComboBoxColumn col = (DataGridViewComboBoxColumn)OwningColumn;

                        col.Items.Add(value);

                    }

                }

            }

            return base.GetFormattedValue(value, rowIndex, ref cellStyle, valueTypeConverter, formattedValueTypeConverter, context);

        }

        void comboBox_Validating(object sender, System.ComponentModel.CancelEventArgs e)

        {

            DataGridViewComboBoxEditingControl cbo = (DataGridViewComboBoxEditingControl)sender;

            if (cbo.Text.Trim() == string.Empty) return;

            DataGridView grid = cbo.EditingControlDataGridView;

            object value = cbo.Text;

            // Add value to list if not there

            if (cbo.Items.IndexOf(value) == -1)

            {

                DataGridViewComboBoxColumn cboCol = (DataGridViewComboBoxColumn)grid.Columns[grid.CurrentCell.ColumnIndex];

                // Must add to both the current combobox as well as the template, to avoid duplicate entries

                cbo.Items.Add(value);

                cboCol.Items.Add(value);

                grid.CurrentCell.Value = value;

            }

        }

    }

}

文档

[WinForm]DataGridView中使DataGridViewComboBox可编辑C

C#][WinForm]DataGridView中使DataGridViewComboBox可编辑2009年04月28日星期二14:56第一步,新建窗体,放置一个DataGridView控件第二步,在Form1相同命名空间中加入以下两个类//要加入的类publicclassDataGridViewComboEditBoxColumn:DataGridViewComboBoxColumn{   publicDataGridViewComboEditBoxColumn()   {       Da
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top