在datagridview中下载Combobox

use*_*090 7 c# combobox datagridview winforms

我一直在努力解决这个问题太长时间了,我已经看到了关于这个主题的所有答案,虽然我发现其中几个似乎对我没有用.所以我的问题的基础如下:DataGridView一旦DataGridView双击另一个单元格,我就会向自己添加一行.当这个DataGridView行添加时,它会向其自身添加两种类型的列,其中一个是a ComboBox,其中已经设置了一个集合(只是转到ComboBoxdatagrid中的选项并填充其集合)和一个复选框列,现在一旦我点击它们,doble clic,多次点击你想要但没有任何反应,他们两个都什么都不做.我甚至试过以下代码.

public static void combolist(DataGridView combogrid)            
{

    var column = new DataGridViewComboBoxColumn();

    DataTable data = new DataTable();

    data.Columns.Add(new DataColumn("Value", typeof(string)));
    data.Columns.Add(new DataColumn("Description", typeof(string)));

    data.Rows.Add("item1");
    data.Rows.Add("item2");
    data.Rows.Add("item3");

    column.DataSource = data;
    column.ValueMember = "Value";
    column.DisplayMember = "Description";

    combogrid.Columns.Add(column); 
}
Run Code Online (Sandbox Code Playgroud)

即使我可以添加类型的新列ComboBox到我的DataGridView它仍然是空的(或似乎是因为我不能点击查看下拉列表).我的数据DataGridViewgridview属性设置为:

editMode:editOnEnter,readOnly:false.

这里有什么我想念的吗?为什么我不能填充或显示这个ComboBox?,这个问题让我发疯,我相信这是找到答案的最佳网站.我非常感谢...很多.

好的,所以我肯定需要从另一个角度来看问题,我甚至尝试ComboBox将数据源绑定到仍然没有显示任何内容!即使绑定到法线的相同数据源ComboBox获得了预期的结果

DataGridViewComboBoxCell ComboColumn = (DataGridViewComboBoxCell)(combogrid.Rows[0].Cells[2]);

ComboColumn.DataSource = class.details.GetData();
ComboColumn.DisplayMember = "name";
Run Code Online (Sandbox Code Playgroud)

ComboBox在内部工作时,我是否缺少一些基本步骤DataGridView

Ons*_*aru 3

一些想法:

  1. 我已经测试了您在 Visual Studio 2012 中发布的代码,并通过单击Button具有空的DataGridView. 它对我有用,因为我得到了一个包含三个空条目的DataGridComboBoxColumna 。ComboBox我扩展了代码如下并得到了三个命名条目:

        data.Columns.Add(new DataColumn("Value", typeof(string)));
        data.Columns.Add(new DataColumn("Description", typeof(string)));
    
        data.Rows.Add("item1");
        data.Rows[data.Rows.Count - 1].SetField("Value", "value1");
        data.Rows[data.Rows.Count - 1].SetField("Description", "description1");
        data.Rows.Add("item2");
        data.Rows[data.Rows.Count - 1].SetField("Value", "value2");
        data.Rows[data.Rows.Count - 1].SetField("Description", "description2");
        data.Rows.Add("item3");
        data.Rows[data.Rows.Count - 1].SetField("Value", "value3");
        data.Rows[data.Rows.Count - 1].SetField("Description", "description3");
    
        column.DataSource = data;
    
    Run Code Online (Sandbox Code Playgroud)

    看来您的代码只是将名为“item1/2/3”的行或刚刚获得第一列(“Value”,不是您的显示值)的行添加到数据表中,该列填充给定值,而数据表中没有可能的值显示。最后,我无法重现您无法打开下拉列表的问题(请注意,我使用了空的,DataGridView因为我不知道您的 中还有什么DataGridView)。

  2. 我不知道发布的代码是否正是您遇到问题的代码。DataGridView但是您写道,当单击单元格时,您会添加一行,并且当发生这种情况时,您会添加两列。您的意思是为每个添加的行添加两列到网格中,还是仅仅意味着该行由这两列组成?
    如果最后一个是正确的,在我看来,这与发布的代码是类似的问题。DataGridViewComboBoxCell您是否考虑过通过添加and手动创建行DataGridViewCheckboxCell?我们有一个安静的复杂环境DataGridViewUserControl,我们可以动态添加不同的细胞类型,并且可以正确显示它们。但我们确实手动创建所有行,将所需的单元格类型手动填充到行中,并且不指定列的类型。