DataGridView DataError on Bound DataTable

本文关键字:DataTable Bound on DataError DataGridView | 更新日期: 2023-09-27 18:36:37

所以我有一个DataGridView,它DataSource属性设置为DataTable

表有三行,前两行是只读的,但第三行是自定义列表对象,DataViewList 。显示出色的所有内容,并且前两列都是只读的。问题出在第三列中。

DataViewList实现IList<T>接口。它唯一特别的是 ToString 方法返回一个逗号分隔的列表,以便DataGridView可以显示该列。

问题是,当用户对第三列进行更改时,在我捕获CellEndEdit事件之前,DataGridView会引发DataError事件。我尝试在我的自定义列表中实现转换,但DataGridView仍然抛出错误,"Invalid cast from 'System.String' to 'DataViewList`1".

_data = new DataTable();
DataColumn column = _data.Columns.Add(FIRST, typeof(Element));
column.ReadOnly = true;
column = _data.Columns.Add(SECOND, typeof(Element));
column.ReadOnly = true;
column =_data.Columns.Add(RESULT, typeof(DataViewList<Element>));
dataGridView.DataSource = _data;

我知道这一点,因为DataGridView在文本框中显示所有内容,我需要编写代码来处理用户输入,但我找不到在DataGridView触发DataError事件之前捕获输入的位置。

DataGridView DataError on Bound DataTable

您需要处理 DataGridView.CellParsing 事件

如果标准转换不能满足您的需求,请处理 CellParsing 事件以提供到所需类型的自定义值转换。

自行转换值时,请将 ConvertEventArgs.Value 属性的初始格式化值替换为单元格ValueType属性指定的类型的转换值。若要指示不需要进一步分析,请将 DataGridViewCellParsingEventArgs.ParsingApplied 属性设置为 true