(使用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’的无效转换
我看过选角讨论和参考书,但看不到任何明显的问题.
有任何想法吗?
解决方法:
我尝试了您的处理CellParsing的方法,并且有效.尽管我做的有些不同,但是可以处理任何类型:
private void dataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
{
e.Value = Activator.CreateInstance(e.DesiredType, new object[] { e.Value });
e.ParsingApplied = true;
}