【发布时间】:2013-10-21 19:42:50
【问题描述】:
我已经看到很多涉及数据绑定的解决方案,但我没有数据源。在这种情况下,组合单元格仅适用于 1 行(其他行没有 DataGridViewComboBoxCell)。
我这样设置 DataGridViewComboCell:
DataGridViewComboBoxCell cell = new DataGridViewComboBoxCell();
cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;
cell.Items.AddRange(items.ToArray()); // items is List<string>
我稍后会像这样动态地重新填充它:
_cell.Items.Clear();
_cell.Items.AddRange(this.Data.ResponseOptions.Select( d => d.Description).ToArray());
//d.Description is of type string
然后我得到了这个讨厌的对话框,上面写着:
DataGridView 出现以下异常: System.ArgumentException:DataGridViewComboBoxCell 值无效。 要替换此默认对话框,请处理 DataError 事件。
顺便说一句,说它不是“有效的”并没有多大帮助。向 MS 发送电子邮件说 Windows 窗体无效是否公平?
我尝试获取单元格的 items 属性并使用 foreach() 和 Add() 调用添加字符串。我仍然得到对话框。
每次我想更新它并从头开始重新创建一个新的 DataGridViewComboCell 时,我都尝试过吹走整个单元格。我仍然得到对话框。
我也尝试过手动覆盖列值(当我没有这个问题时成功)。不过没修好。
当我尝试重新填充组合单元格中的项目时,我似乎只收到此对话框。
现在我只是清除了 DataError 方法。
有什么建议吗?
【问题讨论】:
-
我以前见过这个错误。当您为单元格设置了 ValueType 并且您提供的数据属于不同类型时,就会发生这种情况。你检查过吗?
-
@ThunderGr:我也是这么想的,但正如您从上面看到的那样,我已经尝试将项目添加为最初和更新中完全相同的类型(以多种方式)。
-
如果我是你,我会让 DataError 向我打印一份关于添加项目类型和值的消息框的报告。很多时候,您认为所做的与您实际所做的并不相同。尤其是在 C# 中。说实话,我怀疑 null。
-
您是否尝试让 DataError 向您打印它们导致其触发的值和类型?这是你最有可能的镜头。 DataError 为每个无效的值触发。如果它只为你触发一次,那么只有一个值是无效的。此外,问题可能出在组合的文本值上。不在值列表中。
标签: c# .net winforms datagridview