0

招待者の情報を表示するグリッドを表示したいと考えています。これは難しい部分ですが、受信したメールを示す列が表示されます。

たとえば、次のようなグリッドです。

Firstname | Lastname | ReceivedMail1 | ReceivedMail2

アプリケーションで 3 番目のメールが作成された場合、グリッドは次のような列を追加する必要があります。

Firstname | Lastname | ReceivedMail1 | ReceivedMail2 | ReceivedMail3

私のデータベースはリレーショナルなので、電子メールのコレクションを持つ person.receivedEmails のようなものがあります。

これを行うためのベストプラクティスを探しています。私は WinForms アプリで C# を使用していますが、Web アプリにもこれが必要です。動的オブジェクト (グリッドとの連携がうまくいくかどうかはわかりませんが)、またはデータベース ビューを検討しています。助言がありますか?

4

1 に答える 1

0

わかりました、これが私がやろうとしている方法です。Adding-properties-To-ExpandoObjectsBinding-ExpandoObjects-ToDatagrid に感謝します

プロトタイプは次のとおりです。

        dynamic obj = new ExpandoObject();
        obj.FirsName = "John";
        obj.LastName = "Doe";
        var x = obj as IDictionary<string, Object>;
        for (int i = 0; i < 3; i++)
        {
            x["ReceivedMail_" + i] = true;
        }

        var data = new List<ExpandoObject>() { obj };
        this.dataGridView1.DataSource = data.ToDataTable();

2番目のリンクからその方法を使用する:

    public static class DynamicIENumerableExtension
{
    public static DataTable ToDataTable(this IEnumerable<dynamic> items)
    {
        var data = items.ToArray();
        if (data.Count() == 0) return null;

        var dt = new DataTable();
        foreach (var key in ((IDictionary<string, object>)data[0]).Keys)
        {
            dt.Columns.Add(key);
        }
        foreach (var d in data)
        {
            dt.Rows.Add(((IDictionary<string, object>)d).Values.ToArray());
        }
        return dt;
    }

結果はまさに私が望んでいたようなものです。:)

結果

于 2012-10-14T13:28:48.117 に答える