【问题标题】:how to add a combo box in a datagrid view for only one cell dynamically如何在数据网格视图中为一个单元格动态添加组合框
【发布时间】:2015-06-05 12:32:09
【问题描述】:

我正在使用数据集读取一个 xml 文件,然后我正在创建一个 datagridview 并将表从数据集动态分配给 datagridview.datasource。 我在这里面临的问题是,我想为 datagridview 中的一个单元格添加一个组合框。

下面是我的代码:

datagridview1.AllowUserToAddRows = false;
datagridview1.AllowUserToDeleteRows = false;
datagridview1.RowHeadersVisible = false;
datagridview1.AutoSizeColumnsMode =   DataGridViewAutoSizeColumnsMode.AllCells;
datagridview1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
datagridview1.DataMember = "";
datagridview1.DataSource = my_dataTable;
datagridview1.Columns["first name"].ReadOnly = true;
datagridview1.Columns["Second name"].Visible = false;
datagridview1.Columns["place"].Visible = false;
datagridview1.Columns["address"].Visible = false;
string[] datasource = { "add1", "add2" };
DataGridViewComboBoxCell combo = new DataGridViewComboBoxCell();
combo.DataSource = datasource;
datagridview1.Rows[2].Cells[2] = combo; 

它给我 datagridviewcomboboxcell value is not valid 错误。如果我给出一些值,那么它运行良好但无法在 datagridview 中看到组合框。

【问题讨论】:

  • 如果我将项目添加到组合中,它会抛出异常并出现错误“设置 DataSource 属性时无法修改项目集合”。我认为添加项目与数据源相同。请纠正我如果我的理解不正确。

标签: c# datagridview combobox datagridviewcomboboxcell


【解决方案1】:

您可以使用DataSource 来提供给Items,但使用简单的字符串数组将不起作用。

相反,您可以将数组转换为 List<string> :

string[] datasource = { "add1", "add2" };
DataGridViewComboBoxCell combo = new DataGridViewComboBoxCell();
combo.DataSource = datasource.ToList();
DGV.Rows[2].Cells[2] = combo; 

要设置一个可以使用的值..

combo.Value = combo.Items[0];

..在设置单元格之后。

为了更好地控制,特别是对于分开的Display- 和ValueMembers,您可以切换到Dictionary 或使用List<someClass>..

【讨论】:

  • 抛出异常,错误为“InvalidArgument=Value of '0' is not valid for 'index'”。
  • 确保只在设置单元格之后设置值!
  • 错误得到解决,我设置的任何值都可以正确显示,但组合框不可见。而是显示在文本框中的项目。即文本框(单元格)没有被组合框替换。
  • 这听起来很奇怪。这里的组合框按预期显示。唯一的解释是您之后正在做其他事情来恢复更改,例如可能,尤其是。如果 DGV 具有自动创建的列,当您对第 DGV 进行新的数据绑定时..?
  • 我在该 DGV 之后添加了几行,但现在我将它向上移动了。所以现在我最后添加了组合框,但它仍然只显示第一个项目,并且在文本框中也不在组合框中:(
猜你喜欢
  • 2023-03-04
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 2019-12-02
  • 1970-01-01
  • 2018-07-23
相关资源
最近更新 更多