7

我一直在努力解决这个问题太久了,我已经看到了关于这个问题的所有答案,虽然我发现了几个似乎都不适合我。所以我的问题的基础如下:一旦双击DataGridView另一个单元格,我就会向自己添加一行。DataGridView当这DataGridView添加了行时,它向自身添加了 2 种类型的列,其中一种是 a ComboBox,它应该已经在其中设置了一个集合(只是转到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); 
}

即使我可以ComboBox向我的类型添加一个新列,DataGridView它仍然是空的(或者似乎是因为我无法单击以查看下拉列表)。我的数据DataGridViewgridview 属性设置为:

编辑模式:editOnEnter,只读:假。

我在这里缺少什么吗?为什么我不能填充或显示这个ComboBox?这个问题让我发疯,我相信这是找到答案的最佳网站。我真的很感激它......很多。

好的,所以我绝对需要从另一个角度看待问题,我什至尝试将其绑定ComboBox到数据源,但仍然没有显示任何内容!,即使绑定到普通的相同数据源ComboBox获得了所需的结果

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

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

ComboBox在使用inside时,我是否缺少一些基本步骤DataGridView

4

3 回答 3

3

一些想法:

  1. 我已经测试了您在 Visual Studio 2012 中发布的代码,并通过单击Button一个空的DataGridView. 它对我有用,因为我得到了DataGridComboBoxColumn一个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”的行或刚刚获得第一列(“Value”,这不是您的显示值)填充给数据表的给定值的行添加到没有值的数据表中显示。最后,我无法重现您无法打开下拉列表的问题(请注意,我使用了一个空的DataGridView,因为我不知道您的DataGridView.

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

于 2013-09-27T05:46:33.170 回答
2

您正在向数据表添加 2 列,并且仅填充值成员。试试这个

        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);
于 2013-09-27T05:47:48.507 回答
1

这是因为你DataTable2 columns。但是您只为 column 的单元格添加值1,第 2 列的单元格(将用于DisplayMember您的comboBox)具有空值。试试这个:

//.....
data.Rows.Add("item1","This is Item1");
data.Rows.Add("item2","This is Item2");
data.Rows.Add("item3","This is Item3");
//.....
于 2013-09-27T05:35:22.023 回答