C# datagridview中的下拉组合框

C# datagridview中的下拉组合框,c#,winforms,datagridview,combobox,C#,Winforms,Datagridview,Combobox,我已经为这个问题挣扎太久了,我已经看到了关于这个问题的所有答案,尽管我发现有几个答案似乎都不适合我。因此,我的问题的基础如下:我有一个DataGridView,当双击另一个DataGridView单元格时,它将向自身添加一行。当这个DataGridView添加行时,它会向自身添加两种类型的列,一种是ComboBox,它应该已经在其中设置了一个集合(只是转到datagrid中的ComboBox选项并填充了它的集合)和一个复选框列,现在我单击它们后,它们都不做任何事情,双击,多点单击任意多点,但什么

我已经为这个问题挣扎太久了,我已经看到了关于这个问题的所有答案,尽管我发现有几个答案似乎都不适合我。因此,我的问题的基础如下:我有一个
DataGridView
,当双击另一个
DataGridView
单元格时,它将向自身添加一行。当这个
DataGridView
添加行时,它会向自身添加两种类型的列,一种是
ComboBox
,它应该已经在其中设置了一个集合(只是转到datagrid中的
ComboBox
选项并填充了它的集合)和一个复选框列,现在我单击它们后,它们都不做任何事情,双击,多点单击任意多点,但什么也没发生。我甚至尝试了以下代码

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); 
}
即使我可以在我的
DataGridView
中添加一个类型为
ComboBox
的新列,它仍然是空的(或者看起来是空的,因为我无法单击以查看下拉列表)。我的数据
DataGridView
gridview属性设置为:

editMode:Editonner,只读:false

这里有我遗漏的东西吗?为什么我不能填充或显示此
组合框
?这个问题快把我逼疯了,我相信这是找到答案的最佳网站。我真的非常感激。。。很多

好的,我确实需要从另一个角度来看待这个问题,我甚至尝试将
组合框
绑定到数据源,但仍然没有显示任何内容!,即使绑定到普通
组合框的相同数据源获得了所需的结果

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

ComboColumn.DataSource = class.details.GetData();
ComboColumn.DisplayMember = "name";

在使用
DataGridView
中的
ComboBox
时,是否缺少一些基本步骤?

这是因为您的
DataTable
2列。但是您只为列
1
的单元格添加值,列2的单元格(将用作
组合框的
DisplayMember
)具有空值。请尝试以下方法:

//.....
data.Rows.Add("item1","This is Item1");
data.Rows.Add("item2","This is Item2");
data.Rows.Add("item3","This is Item3");
//.....
一些想法:

  • 我已经用visual studio 2012测试了您的代码,并通过单击
    按钮执行代码,该按钮具有空的
    DataGridView
    。它对我很有用,因为我得到了一个
    datagridcomboxcolumn
    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;
    
    似乎您的代码只是将一个名为“item1/2/3”的行或一个刚得到第一列(不是您的displayvalue的Value)的行添加到数据表中,该数据表中没有可以显示的值。最后,我无法重现您无法打开dropdownlist的问题(请注意,我使用了一个空的
    DataGridView
    ,因为我不知道您的
    DataGridView
    中还有什么)

  • 我不知道发布的代码是否就是您遇到问题的代码。但您写道,当单击单元格时,您会向
    DataGridView
    添加一行,当发生这种情况时,您会添加两列。您的意思是为每一行添加两列到网格中,还是说该行由这两列组成?
    如果最后一个是正确的,我认为这是一个类似于发布代码的问题。您是否考虑手动添加行,添加“代码> > DATAGIDVIEWCOMBOBOXCELL 和<代码> DATAGIDVIEW CHECKBOXCELL ?我们有一个非常复杂的
    DataGridViewUserControl
    ,在这里我们可以动态地添加不同的单元格类型,并且在正确显示它们方面没有问题。但我们确实手动创建所有行,手动将所需的单元格类型填充到行中,并且不为列指定类型


  • 您将向datatable添加2列,并仅填充value成员。试试这个

            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","123");
            data.Rows.Add("item2","234");
            data.Rows.Add("item3","245");
    
            column.DataSource = data;
            column.ValueMember = "Value";
            column.DisplayMember = "Description";
    
            dataGridView1.Columns.Add(column);
    

    我很欣赏你的回答,但即使改变了这一点也没有区别,我认为问题在于,组合似乎没有对我所做的任何clic事件或任何事情做出响应,尽管我不明白为什么会这样happen@user2793090抱歉,我测试了它我的datagrid中一定有什么设置错误,某些属性,因为我做了你建议的改变,我仍然得到同样的结果。。。有什么想法吗?对不起,我的解释把你弄糊涂了。问题是,datagrid2是一个空的datagrid,一旦触发事件cellclick on datagrid1,就会向其中添加一行2列,列类型为apear的行将以正确的方式添加,但在combobox列(column1)中找不到collection,单击复选框按钮column2时也不会发生任何事情。我想最好的办法是通过编程方式添加所有栏目,但我不太清楚我为什么会有这个问题,thx代表你的答案buddythx代表你的答案,但我仍然得到相同的结果,即使在这个修改中,在给定的信息中没有看到错误,而且我不知道你应该考虑什么特别的东西,因为<代码> DATAGIDVIEW COMBOBOXCELL 几乎与通常的代码>组合框相同。也许您可以发布添加行/列的完整代码以及与此操作相关的
    DataGridView
    的其他内容?