在数据网格视图中下拉组合框

本文关键字:组合 视图 数据 数据网 网格 | 更新日期: 2023-09-27 18:33:10

我已经在这个问题上挣扎太久了,我已经看到了关于这个主题的所有答案,虽然我发现了几个似乎都不适合我。所以我的问题的基础如下:我有一个DataGridView,一旦双击另一个DataGridView单元格,它将向自身添加一行。当这个DataGridView添加行时,它会向自身添加 2 种类型的列,一种是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 属性设置为:

编辑

模式:编辑输入,只读:假。

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

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

DataGridViewComboBoxCell ComboColumn = (DataGridViewComboBoxCell)(combogrid.Rows[0].Cells[2]);
ComboColumn.DataSource = class.details.GetData();
ComboColumn.DisplayMember = "name";

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

在数据网格视图中下拉组合框

一些想法:

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

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

您正在向数据表添加 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);

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

//.....
data.Rows.Add("item1","This is Item1");
data.Rows.Add("item2","This is Item2");
data.Rows.Add("item3","This is Item3");
//.....