【发布时间】:2010-03-24 20:46:32
【问题描述】:
(使用 VS 2010 Beta 2 - .Net 4.0 B2 Rel)
我有一个类 MyTable,它派生自 BindingList,其中 S 是一个结构。 S 由几个其他结构组成,例如:
public class MyTable<S>:BindingList<S> where S: struct
{
...
}
public struct MyStruct
{
public MyReal r1;
public MyReal r2;
public MyReal R1 {get{...} set{...}}
public MyReal R2 {get{...} set{...}}
...
}
public struct MyReal
{
private Double d;
private void InitFromString(string) {this.d = ...;}
public MyReal(Double d) { this.d = d;}
public MyReal(string val) { this.d = default(Double); InitFromString(val);}
public override string ToString() { return this.real.ToString();}
public static explicit operator MyReal(string s) { return new MyReal(s);}
public static implicit operator String(MyReal r) { return r.ToString();}
...
}
好的,我使用 MyTable 作为 DataGridView 的绑定源。我可以在 MyStruct 中的各个字段上使用 InitFromString 轻松加载数据网格。
当我尝试在 DataGridView 的单元格中编辑值时出现问题。转到第一行第一列,我更改现有数字的值。它给出了一个异常暴风雪,其中第一行说:
System.FormatException:从“System.String”到“MyReal”的无效转换
我查看了选角讨论和参考书,但没有发现任何明显的问题。
有什么想法吗?
【问题讨论】:
-
这是 System.FormatException,而不是 InvalidCastException?检查堆栈跟踪,是什么引发了异常?
-
可能是因为您的运算符从字符串转换为实数是显式的而不是隐式的?
-
这两个例外。默认错误对话框报告'System.FormatException:Invalid cast from 'System.String' to 'MyReal' --> System.InvalidCastException: Invalid cast from 'System.String' to 'MyReal'
-
我认为我需要明确处理解析和格式化事件,而不是使用默认处理程序。
-
@MaxYaffe 刚刚回顾了我发布的一些旧答案,我想知道我们对此是否有任何帮助?
标签: c# datagridview struct .net