在数据网格视图中下拉组合框
本文关键字:组合 视图 数据 数据网 网格 | 更新日期: 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
时,我是否缺少一些基本步骤?
一些想法:
-
我已经测试了您在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
中还有什么(。 -
我不知道发布的代码是否正是您遇到麻烦的代码。但是你写道,当单击一个单元格时,你会在
DataGridView
中添加一行,当这种情况发生时,你会添加两列。您的意思是为每个添加的行向网格添加两列,还是只是说该行由这两列组成?
如果最后一个是正确的,在我看来,这与发布的代码存在类似的问题。您是否考虑过通过添加DataGridViewComboBoxCell
和DataGridViewCheckboxCell
手动创建行?我们有一个安静复杂的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");
//.....