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