我有三列,textbox、combobox和textbox,按顺序排列:
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 });
}
这将导致数据网格的第一列和最后一列已填充,comboboxolumn为空。我处理了一个数据错误。消息是:
DataGridViewComboBoxCell value is not valid.
我已经通读了大部分帖子,但找不到解决这个问题的方法。
我尝试过这样设置数据源:
cell.DataSource = new string[] { profile.Address };
仍为空comboboxolumn,数据错误为
DataGridViewComboBoxCell value is not valid.
我认为这是非常棘手的,因为我为每个comboxcell添加了不同的值。
有人能帮我做这件事吗。
/最佳
游戏进行到很晚,但这里有解决方案。
问题出在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);
}