Relectionを使用してクラスプロパティを設定するために、次のコードを使用しています
MyClasss c = new MyClass(id);
prop = c.GetType().GetProperty(field);
prop.SetValue(c, Convert.ChangeType(value, prop.PropertyType), null);
値は DataGridView から取得され、CellEndEdit イベントによってトリガーされるため、ユーザーが入力する値は、多数のプロパティと型のいずれかになります。
Convert.ChangeType が正常に機能する場合もありますが、Invalid Cast エラーが発生する場合もあります。
たとえば、プロパティの型が (decimal?) [nullable decimal] の場合、エラーが発生します。
[編集]
私がやっていることのもう少しの背景として、DataGridView には、ユーザーが SQL サーバーのデータに対して行った最近の変更に関する情報が含まれています。変更のリストが含まれており、テーブル、フィールド、新しい値、および古い値と、誰がいつ変更を行ったかの詳細が表示されます。マネージャーが変更の 1 つに同意しない場合は、元に戻すオプションがあります。そのため、リストの項目が選択されたら、コードで適切なテーブルとフィールドを検索し、現在の値を保存されている oldvalue に戻す必要があります。これは、クライアントが特に DataGrid として望んでいた監査制御機能です。
問題は、データグリッドに表示されるフィールドの数が原因で、データのタイプが何でもあり、実行時までわからないことです。正直なところ、これらの状況で DataBinding を使用する方法はわかりませんが、Reflection よりも優れたオプションであると誰かがまだ信じている場合は、おそらく正しい方向に向けてください。