8

これは、System.Type.Nameにバインドしようとしたときに発生する例外です。

これが私がしていることです:

this.propertyTypeBindingSource.DataSource = typeof(System.Type);

/* snip */

this.nameTextBox1.DataBindings.Add(
    new System.Windows.Forms.Binding(
        "Text", 
        this.propertyTypeBindingSource, 
        "Name", true));

System.Typeへのバインドにいくつかのトリックがありますか、それは許可されていませんか、または回避策はありますか?他のタイプへのバインドに問題はありません。

4

3 に答える 3

13

確かに、タイプには特別な扱いがあります... このアプローチは、事前にメタデータを構成するために IDE などで使用されます。IDE によって生成されたバインディングを見ると、次のようなことが行われます。

bindingSource1.DataSource = typeof(MyObject);

「実際のデータを取得するときは、MyObject インスタンスが必要です」と言っています。つまり、"Name" を要求すると、Type インスタンスの Name ではなく、MyObject の name プロパティが検索されます。これにより、グリッドなどは実際のデータを待たずにメタデータを取得できます。ただし、結果として、「実際に」タイプにバインドすることはできません。

System.ComponentModel コードは、シンプル バインディングとリスト バインディング (通貨マネージャーを与えるか受け取るか) で同じであるため、シンプル バインディングもこの動作を継承します。同様に、IList/IListSource を実装するクラスのプロパティにバインドすることはできません。これは特別な方法で解釈されるためです。

あなたの余分なクラスは合理的なアプローチのようです。

于 2008-10-21T05:55:32.597 に答える
3

回避策を見つけました。クラスを作りました

public class StubPropertyType
{
    public StubPropertyType(Type type)
    {
        this.StubPropertyTypeName = type.Name;
    }

    public string StubPropertyTypeName = string.Empty;
}

バインディング ソースを作成しました

this.propertyStubBindingSource.DataSource = typeof(StubPropertyType);

クラスのインスタンスを作成し、それにテキストボックスをバインドしました。

this.nameTextBox.DataBindings.Add(
    new System.Windows.Forms.Binding(
        "Text", 
        this.propertyStubBindingSource, 
        "StubPropertyTypeName", 
        true));

必要に応じて正確に機能します。

于 2008-10-21T00:42:55.147 に答える
0

このエラーの考えられる理由の1つは、テーブル/データセットに指定された列がないことです。特に、型付きデータセットの場合は、テーブルの列名と一致するXSDの適切な名前があることを確認してください

于 2011-01-12T04:33:43.170 に答える