Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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# DataGridComboxColumn显示CellEnter上的第一个值_C#_Winforms_Visual Studio 2010_Datagridview_Datagridviewcombobox - Fatal编程技术网

C# DataGridComboxColumn显示CellEnter上的第一个值

C# DataGridComboxColumn显示CellEnter上的第一个值,c#,winforms,visual-studio-2010,datagridview,datagridviewcombobox,C#,Winforms,Visual Studio 2010,Datagridview,Datagridviewcombobox,我的DataGridViewComboBoxColumn列中出现了奇怪的结果 1) 当没有设置值时,我单击单元格(不是下拉箭头),选项中的第一个值显示为值,当我单击单元格时,它返回空白值。这是误导性的,因为没有选择值,但它会显示第一个值,直到您单击单元格 一个解决方案是将第一个选项设置为空白,但是接下来的问题仍然困扰着我 2) 如果我选择一个已经有值的单元格,然后选择一个没有值的单元格,则最初选择的值将显示在没有选择值的单元格中。同样,单击单元格将清除它,但是,这又是一种误导 我希望这不会误导你

我的DataGridViewComboBoxColumn列中出现了奇怪的结果

1) 当没有设置值时,我单击单元格(不是下拉箭头),选项中的第一个值显示为值,当我单击单元格时,它返回空白值。这是误导性的,因为没有选择值,但它会显示第一个值,直到您单击单元格

一个解决方案是将第一个选项设置为空白,但是接下来的问题仍然困扰着我

2) 如果我选择一个已经有值的单元格,然后选择一个没有值的单元格,则最初选择的值将显示在没有选择值的单元格中。同样,单击单元格将清除它,但是,这又是一种误导

我希望这不会误导你。。。有人知道解决办法吗

DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn(); 

DataTable dt = new DataTable();
dt.Columns.Add("f_Id");
dt.Columns[0].DataType = typeof(string);
dt.Columns.Add("f_Desc");
dt.Columns[1].DataType = typeof(string);

for (int i = 0; i < values.Count(); i++)
{
    dt.Rows.Add(values[i], values[i]);
}

col.DataSource = dt;
col.DisplayMember = dt.Columns[1].ColumnName;
col.ValueMember = dt.Columns[0].ColumnName;
col.HeaderText = header;
col.Name = header;

DataGridView1.Columns.Add(col);
datagridviewcomboxcolumn=newdatagridviewcomboxcolumn();
DataTable dt=新的DataTable();
添加(“f_Id”);
dt.Columns[0].DataType=typeof(字符串);
dt.列。添加(“f_Desc”);
dt.Columns[1].DataType=typeof(字符串);
对于(int i=0;i
我也在寻找这个问题,最终解决了这个问题。 创建DatagridView的以下事件并将[comboboxcolumnNo]设置为DataGridComboxColumn编号

现在,每当combobox列获得要编辑的焦点时,它都会检查当前单元格值是否为null,如果为null,则会显示combobox的-1索引,该索引不显示任何内容

    private void datagridview1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        if (datagridview1.CurrentCell.ColumnIndex == comboboxcolumnNo && e.Control is ComboBox)
        {
            ComboBox comboBox = (ComboBox)e.Control;
            if (datagridview1.CurrentCell.Value == null)
            {
                comboBox.SelectedIndex = -1;
            }
        }
    }

这也困扰了我一段时间,Zeeshanef的代码帮助了我,但仍然没有完全解决我的问题。进一步调查后,我发现如果使用DefaultValuesNeed方法设置一些默认值,则可能会设置单元格值,但EditingControlShowing方法中显示的combobox控件的值/文本为空。我通过如下方式调整代码解决了此问题:

private void datagridview1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        if (e.Control is ComboBox)                
        {
            ComboBox comboBox = (ComboBox)e.Control;
            if (datagridview1.CurrentCell.Value == null
                || string.IsNullOrEmpty(datagridview1.CurrentCell.Value.ToString())
                || string.IsNullOrEmpty(comboBox.SelectedText)
                )
            {
                comboBox.SelectedIndex = -1;
            }               
        }
    }

没人知道这件事?这是微软的默认设置,非常烦人。