2017-11-13 4 views
0

私はDataGridViewのをした、と私はCellEndEditイベント使用して、セルの値が変更されたこのリストに接続し、コレクションを変更したい:はDataGridViewの値からの反射によって、プロパティ値を設定する

var p = wareList[e.RowIndex].GetType().GetProperties()[e.ColumnIndex]; 

object value = dataGreadView[e.ColumnIndex, e.RowIndex].Value; 

p.SetValue(typeof(Ware), Convert.ChangeType(value, p.PropertyType)); 

しかし時を最後の行私は除外を得たSystem.Reflection.TargetException: "The object does not match the end type."

答えて

0

SetValue()は値を設定するオブジェクトを取ります。

プロパティがSystem.Typeに定義されていないため、System.Typeを渡すとエラーになります。

あなたのプロパティを実際に持つオブジェクトを渡す必要があります。

+0

私はちょっと混乱しています...例えば 'Ware.Name' propが' string'型であるので、 'p = Ware.Name'なら' p.PropertyType'と 'p.PropertyType'を渡すことができます。私の 'Ware.Name' propのための' string'型を返します...またはいいえ? – NisuSan

+0

@ NisuSan:これは、SetValueとは関係がありません。インスタンスではなく、型が必要です。 – SLaks

関連する問題