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.CellParsing 事件
如果标准转换不能满足您的需求,请处理
CellParsing
事件以提供到所需类型的自定义值转换。自行转换值时,请将
ConvertEventArgs.Value
属性的初始格式化值替换为单元格ValueType
属性指定的类型的转换值。若要指示不需要进一步分析,请将DataGridViewCellParsingEventArgs.ParsingApplied
属性设置为true
。