所以我有DataGridView
将DataSource
属性设置为DataTable
。
表有三行,前两行是只读的,但第三行是自定义列表对象DataViewList
。显示优秀和前两列的所有内容都是ReadOnly,因为它们应该是。问题出在第三栏。
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
显示TextBoxes中的所有内容,我需要编写代码来处理用户输入,但是在DataGridView
触发{DataError
之前我找不到捕获输入的位置1}}事件。
答案 0 :(得分:0)
您需要处理DataGridView.CellParsing Event
如果标准转换无法满足您的需求,请处理
CellParsing
事件以提供自定义值转换为所需类型。当您自己转换值时,请将
ConvertEventArgs.Value
属性的初始格式化值替换为单元格ValueType
属性指定的类型的转换值。要指示不需要进一步解析,请将DataGridViewCellParsingEventArgs.ParsingApplied
属性设置为true
。