2

私は DataTable から BindingList に切り替える過程にあります。DataTable を DataGrid オブジェクトにバインドします。

ここに私のジレンマがあります。切り替えの利点は確かにわかりますが、私の状況では少し複雑になり、切り替える価値があるかどうか疑問に思っています。

私のシナリオ: 化学サンプルを表示する DataGrid があります。5 種類のサンプル タイプがあり、グリッド内の列はタイプごとに異なります (場合によっては、他のパラメーターに基づいて同じタイプ内で)。一部の列は同じままで、一部は 3 つの型で存在し、一部は 4 つの型で存在するなどです。単純な継承の場合とは異なります。現在、BindingList を使用する場合に必要となる、サンプルの種類ごとにプロパティを持たなくても、必要な列をロードできるため、簡単に DataTable を使用できます。ただし、BindingList を使用すると、後でサンプル プロパティを簡単に参照できるようになります。

これは、このオブジェクト (BindingList) を使用した初めての経験なので、どんな提案も歓迎します。私が知っていることから、BindingList はプロパティにバインドします。だから私が持っている場合:

public class Sample
{
    protected string m_seq;
    protected string m_id;
    protected string m_weight;
    protected string m_units;

    public Sample()
    {
    }

    public string Seq
    {
        get { return m_seq; }
        set { m_seq = value; }
    }

    public string Id
    {
        get { return m_id; }
        set { m_id = value; }
    }

    public string Weight
    {
        get { return m_weight; }
        set { m_weight = value; }
    }

    public string Units
    {
        get { return m_units; }
        set { m_units = value; }
    }

} //end of class

次のようなものがある場合、グリッドは Sample クラスのプロパティにバインドされます

BindingList samples = new BindingList<Sample>();

つまり、6 種類のサンプルがあり、すべてプロパティが定義されています。最終的な継承構造は複雑になる可能性があるため、それだけの価値があるかどうか疑問に思っています。どんなフィードバックでも大歓迎です。

私はc#2.0を使用しています。Windows アプリです。

4

1 に答える 1

1

を使用している場合DataGrid、 に切り替える可能性はありますDataGridViewか? それははるかに柔軟になります...

質問から完全にはわかりませんが、次のとおりです。

プロパティは固定されているが、すべての列を表示したくない場合

次にAutoGenerateColumns = false、データを追加する前に設定し、必要な列を自分で追加します。または、有効のままにして.Visible = false、表示したくない列に設定するだけです。

プロパティが実行時に動的である場合

次に、注意が必要です。あなたはの暗い隅に入っていますSystem.ComponentModel。これはDataGridViewvia ITypedList(リスト インスタンスごとに異なる定義を許可する) またはTypeDescriptionProvider(タイプごとまたはリスト インスタンスごとに異なる定義を許可する) で行うことができますが、そのうちTypeDescriptionProviderBindingList<T>. 正直なところ、これはあなたの言いたいことではないと思います。もしそうなら、それに固執するのは簡単ですDataTable(どちらも正しく実装するのは非常に困難です)。


お役に立てば幸いです。いくつかの列を非表示にするのと同じくらい簡単だといいのですが! ポイントを逃した場合は、お知らせください。

于 2009-07-23T19:28:20.513 に答える