2009-05-25 10 views
1

私は、EAVタイプのスキーマに保持されている一連のメタデータに基づいて、その場でキャプチャフォームを作成しています。動的フォームコントロールのプロパティ

私の問題は、データをコントロール、特にwinformsコンボボックスに戻していることです。

また、コントロールにバインドされているデータにEntity Frameworkを使用します。

  1. チェックが存在するかどうかを確認してください。マップされたプロパティごとに値を設定します。 つまり、データソース、DisplayMember、ValueMemberなど...

  2. SelectedValueプロパティには値がありますか?これが失敗するのはどこですか?

オブジェクトの検査では、データソースを含む以前の値がまだロードされていないように見えますか?しかし、コンボボックスはレンダリングされた値を表示しますか?

コードの一部です。

Type oType = Type.GetType("System.Windows.Forms.ComboBox"); 
if (oControlObject == null) 
{ 
    oControlObject = (Control)Activator.CreateInstance(oType); 
    oControlObject.Tag = item; 
    oControlObject.CreateControl(); 
} 

...Loop to set Datasource, DisplayMember & ValueMember ... 

if (property.IsReadProperty.Value && value != null) 
{ 
    PropertyInfo propSet = oType.GetProperty(property.PropertyName); //PropertyName here is "SelectedValue" 
    propSet.SetValue(oControlObject, value.Value, null); 
} 
+0

私があなたが何を意味しているのか理解していると主張すれば、私は嘘をつきますが、コントロールの代わりにコンボボックスにキャストするのはどうでしょうか。私は知らない、私は完全に間違っている可能性があります。 – Galilyou

+0

この時点で私は反射を使ってオブジェクトとやりとりしているので、キャスティングは違いを生むべきではありません。しかし、良い提案。とにかく、それを試してみませんか? –

答えて

0

これは機能しています。問題は、コントロールがフォーム上でレンダリングされるまでコントロールが初期化されないため、データソースが設定されているにもかかわらずアイテムコレクションがないことです。

最初に動的フォームを構築し、コントロールを繰り返し繰り返して保存値を設定しました。エレガントではありませんが、別の解決策があるまで機能します。

関連する問題