在datagridview中下载Combobox

时间:2013-09-27 04:52:31

标签: c# winforms datagridview combobox

我一直在努力解决这个问题太长时间了,我已经看到了关于这个主题的所有答案,虽然我发现其中没有一个似乎对我有用。所以我的问题的基础如下:我有一个DataGridView,一旦双击另一个DataGridView单元格,它将向自己添加一行。当这个DataGridView添加了行时,它会向自身添加两种类型的列,一个是ComboBox,其中已经设置了一个集合(刚进入ComboBox选项内部数据网格和填充其集合)和一个复选框列,现在它们都没有做任何一旦我点击它们,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); 
}

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

  

editMode:editOnEnter,readOnly:false。

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

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

ComboBox

DataGridViewComboBoxCell ComboColumn = (DataGridViewComboBoxCell)(combogrid.Rows[0].Cells[2]); ComboColumn.DataSource = class.details.GetData(); ComboColumn.DisplayMember = "name"; 内使用ComboBox时,我是否缺少一些基本步骤?

3 个答案:

答案 0 :(得分:3)

一些想法:

  1. 我已经使用visual studio 2012测试了您的代码,并通过点击ButtonDataGridView来执行代码。它对我有用,因为我得到一个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”,而不是您的displayvalue)的行添加到没有值的数据表中的给定值可以显示。最后,我无法重现您无法打开下拉列表的问题(请注意我使用了空DataGridView,因为我不知道您在DataGridView中还有什么。)< / p>

  2. 我不知道发布的代码是否与您遇到问题的代码完全相同。但是你写道,当你点击一个单元格时,你向DataGridView添加一行,当你发生这种情况时,你会添加两列。你的意思是你为每个添加的行添加两列到网格,或者你只是意味着该行包含这两列? 如果最后一个是正确的,在我看来与发布的代码类似的问题。您是否考虑过添加DataGridViewComboBoxCellDataGridViewCheckboxCell来手动创建行?我们有一个安静的复杂DataGridViewUserControl,我们动态添加不同的单元格,并且没有问题让它们正确显示。但是我们会手动创建所有行,手动将希望的单元格类型填充到行中,而不指定列的类型。

答案 1 :(得分: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);

答案 2 :(得分:1)

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

comboBox