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
的其他内容?