我一直在努力解决这个问题太长时间了,我已经看到了关于这个主题的所有答案,虽然我发现其中没有一个似乎对我有用。所以我的问题的基础如下:我有一个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
时,我是否缺少一些基本步骤?
答案 0 :(得分:3)
一些想法:
我已经使用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”,而不是您的displayvalue)的行添加到没有值的数据表中的给定值可以显示。最后,我无法重现您无法打开下拉列表的问题(请注意我使用了空DataGridView
,因为我不知道您在DataGridView
中还有什么。)< / p>
我不知道发布的代码是否与您遇到问题的代码完全相同。但是你写道,当你点击一个单元格时,你向DataGridView
添加一行,当你发生这种情况时,你会添加两列。你的意思是你为每个添加的行添加两列到网格,或者你只是意味着该行包含这两列?
如果最后一个是正确的,在我看来与发布的代码类似的问题。您是否考虑过添加DataGridViewComboBoxCell
和DataGridViewCheckboxCell
来手动创建行?我们有一个安静的复杂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)
这是因为您的DataTable
有2 columns
。但是,您只为列1
的单元格添加值,第2列的单元格(将用作DisplayMember
的{{1}})具有空值。试试这个:
comboBox