Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在DataGridView中是否可以有一列作为组合框,允许用户输入新值?_C#_Winforms_Datagridview - Fatal编程技术网

C# 在DataGridView中是否可以有一列作为组合框,允许用户输入新值?

C# 在DataGridView中是否可以有一列作为组合框,允许用户输入新值?,c#,winforms,datagridview,C#,Winforms,Datagridview,我知道,在正常的组合框中,如果平面样式是标准,用户将能够键入一个不在项目列表中的值。但是如果DataGridView中的组合框是标准的,它将不允许我键入新值。是否可以在DataGridView中的列中实现此功能?在DataGridView中,您可以添加DataGridViewComboBoxColumn类型的列。它的DisplayStyle和/或FlatStyle取决于当前行状态。我认为,当您添加新行(编辑模式)时,您可以向其中添加值 参考资料: 您可能想看看DataRepeater控件的使用。

我知道,在正常的
组合框中
,如果
平面样式
标准
,用户将能够键入一个不在
项目
列表中的值。但是如果
DataGridView
中的组合框是
标准的
,它将不允许我键入新值。是否可以在
DataGridView
中的列中实现此功能?

在DataGridView中,您可以添加
DataGridViewComboBoxColumn
类型的列。它的
DisplayStyle
和/或
FlatStyle
取决于当前行状态。我认为,当您添加新行(编辑模式)时,您可以向其中添加值

参考资料:

您可能想看看DataRepeater控件的使用。DataGridView控件似乎是为查看数据而设计的。如果您希望用户控制数据,那么DataRepeater可能就是您想要的方式
    private void dataGridView2_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        try
        {
            switch (dataGrid_ItemsList.Columns[dataGrid_ItemsList.SelectedCells[0].ColumnIndex].HeaderText)
            {
                case "Batch":
                    if (e.Control is ComboBox)
                    {
                        ComboBox _with1 = (ComboBox)e.Control;
                        _with1.DropDownStyle = ComboBoxStyle.DropDown;
                        _with1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
                        _with1.AutoCompleteSource = AutoCompleteSource.CustomSource;
                        _with1.AutoCompleteCustomSource = BatchList;
                        //_with1.Validating -= HandleComboBoxValidating;
                        //_with1.Validating += HandleComboBoxValidating;

                        _with1.Validating += (ss, ee) =>
                        {
                            if (!_with1.Items.Contains(_with1.Text))
                            {
                                var comboColumn = dataGrid_ItemsList.CurrentCell as DataGridViewComboBoxCell;
                                _with1.Items.Add(_with1.Text);
                                _with1.Text = _with1.Text;
                                comboColumn.Items.Add(_with1.Text);
                                this.dataGrid_ItemsList.CurrentCell.Value = _with1.Text;
                            }
                        };
                    }
                    break;
            }
        }
        catch (Exception ex)
        {
            _CommonClasses._Cls_ExceptionsHandler.HandleException(ex,false);
        }
    }