(Использование 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. Я могу легко загрузить сетку данных, используя InitFromString для отдельных полей в MyStruct.
Проблема возникает, когда я пытаюсь редактировать значение в ячейке DataGridView. Переходя к первому ряду, первому столбцу, я меняю значение существующего числа. Это дает исключение метель, первая строка которой гласит:
System.FormatException: недопустимое приведение из «System.String» к «MyReal»
Я смотрел на кастинговые обсуждения и справочники, но не вижу очевидных проблем.
Есть идеи?