使用DataGridViewComboBoxColumn将行添加到网格时出现ArgumentException

时间:2014-02-05 16:35:45

标签: c# winforms

所以我在一个名为dgAttributes的WinForms应用程序上有一个简单的Grid。我使用以下代码来设置列:

dgAttributes.Columns.Clear();
dgAttributes.Columns.Add("Path", "Path");
dgAttributes.Columns.Add("Parameter", "Parameter");
DataGridViewComboBoxColumn comboBoxColumn = new DataGridViewComboBoxColumn
{
        HeaderText = "DataConnection",
        Name = "DataConnection",
        DisplayMember = "ConnectionName",
        ValueMember = "ServerName",
        DataSource = _dataConnections
};
dgAttributes.Columns.Add(comboBoxColumn);
dgAttributes.Columns.Add("Tag", "Tag");

_dataConnections变量包含DataConnections列表,并且始终至少填充一个有效实例。我希望ConnectionName显示在网格中。 DataConnection类如下所示:

public class DataConnection
{
    public string ServerName;
    public string UserName;
    public string ConnectionName;
    public override string ToString()
    {
        return ConnectionName;
    }
}

但是当我尝试执行以下操作时:

DataConnection conn = _dataConnections.DefaultIfEmpty(_dataConnections.FirstOrDefault())
                        .FirstOrDefault(a => a.ConnectionName == point.DataConnection);
dgAttributes.Rows.Add(point.RelativePath, point.Element.Name, conn, point.Tag);

我在第二行说明:

,得到一个ArgumentException(没有InnerException)
  

名为ConnectionName的字段不存在。

有人能告诉我我做错了什么吗?我认为这是非常明显的,但我似乎无法弄明白。我确实看了一些例子和其他帖子,但看起来我做的是正确的。

2 个答案:

答案 0 :(得分:0)

事实证明,来自MSDN的信息应该非常字面地理解:

  

然后必须将DisplayMember属性设置为必需的属性   名称或列名。

这里的“property”是关键字。字段不起作用。因此,在将字符串字段更改为属性后,一切都很顺利。 我必须说Exception消息非常具有误导性。而且我希望这可以拯救某个人,某个地方,有点头疼。

(来源:http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcomboboxcolumn.displaymember%28v=vs.110%29.aspx

答案 1 :(得分:0)

对我来说,将DatagridView的“ AutoSizeColumnsMode”值设置为“所有单元格”将给出此错误,并将值重新设置为“无”将解决此问题