2

たとえば、次のクラス宣言のインスタンスがあります。

public class Person
{
    public string Name = "";
    public Dictionary<string, string> Properties = new Dictionary<string, string>();
}

そして、Asp.NETドロップダウンリストにバインドしたい人のリストがあります。

List<Person> people = new List<Person>();
//fill the list etc..

//bind to the drop down list
ddlPeople.DataSource = people;
ddlPeople.DataTextField = "Name";
ddlPeople.DataTextField = "Properties['Age']"; //this is what I would like!

年齢は常に存在します。私は人のクラスを制御できません。私がやろうとしていることが達成可能かどうか誰かが知っていますか?

ありがとう!

4

2 に答える 2

1

私の知る限り、あなたはそれをすることはできません。

私は行くだろうと思います:

ddlPeople.Items.Clear();
ddlPeople.Items.AddRange(people.Select(p => new ListItem(p.Name, p.Properties["Age"])).ToArray());

しかし、それがあなたの質問のポイントであるかどうかはわかりません。

于 2013-02-12T16:29:36.130 に答える
0

おそらく、personクラスに読み取り専用プロパティを作成するだけでよいでしょうか。

public class Person
{
    public string Name = "";
    public Dictionary<string, string> Properties = new Dictionary<string, string>();

    public int Age
    {
        get
        {
            // ... code to handle situations where Properties
            //     is null or does not contain key
            return (int)this.Properties["Age"];
        }
    }
}

あなたが求めている種類のバインディングはWPFで可能だと思いますが、ASP.NETでそれが行われるのを見たことがないと思います。

于 2013-02-12T16:25:15.720 に答える