如何使用具有不同值列表的组合框的文本框和组合框填充DataGridView

时间:2012-07-17 10:59:03

标签: c# datagridview datagridviewcolumn datagridviewcombobox datagridviewcomboboxcell

我按顺序有三列,文本框,组合框和文本框:

this.columnLocalName = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.columnLocalAddress = new System.Windows.Forms.DataGridViewComboBoxColumn();
this.columnLocalPort = new System.Windows.Forms.DataGridViewTextBoxColumn();   

他们反过来就是这样的数据网格视图:

this.dataGridViewLocalProfile.Columns.AddRange(
new System.Windows.Forms.DataGridViewColumn[] {
                    this.columnLocalName,
                    this.columnLocalAddress,
                    this.columnLocalPort});

稍后我将尝试为每个组合框单元添加不同的值,如下所示:

foreach (profile in localProfile.List)
{
DataGridViewComboBoxCell cell =(DataGridViewComboBoxCell)
(dataGridViewLocalProfile.Rows[dataGridViewLocalProfile.Rows.Count - 1].
Cells["columnLocalAddress"]);

cell.Items.Clear();
cell.Items.Add(profile.Address.ToString());

dataGridViewLocalProfile.Rows.Add(
new string[] { profile.Name, profile.Address, profile.Port });
}

这会导致数据网格填充第一列和最后一列,并且组合框列为空。我处理的dataerror。消息是:

DataGridViewComboBoxCell value is not valid.

我已阅读了大部分帖子,但无法找到解决方案。

我试过像这样设置数据源:

cell.DataSource = new string[] { profile.Address };

仍然是空的组合框,数据错误说

DataGridViewComboBoxCell value is not valid.

我认为这是特别棘手的,因为我为每个组合单元添加了不同的值。

任何人,请帮助我如何使这项工作。

/最佳

1 个答案:

答案 0 :(得分:0)

游戏后期,但无论如何这里都是解决方案。

问题出在foreach循环中。最后一个现有行的ComboBox单元格中填充了一个项目。但是,使用当前的profile对象添加了一个全新的行:

dataGridViewLocalProfile.Rows.Add( new string[] { profile.Name, profile.Address, profile.Port });

此新行中ComboBox单元格的项目为空,因此profile.Address 无效。将foreach循环更改为这样,你就是黄金:

foreach (Profile p in this.localProfile)
{
  DataGridViewRow row = new DataGridViewRow();
  row.CreateCells(this.dataGridView1);

  DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)row.Cells[1];
  cell.Items.Clear();
  cell.Items.Add(p.Address);

  row.Cells[0].Value = p.Name;
  row.Cells[1].Value = p.Address;
  row.Cells[2].Value = p.Port;
  this.dataGridView1.Rows.Add(row);
}