Binden Sie ein Dictionary<K V> zu einer DropDownList
Ich Frage mich, warum dies nicht funktioniert:
Ist es möglich deklarativ binden an ein Objekt die Eigenschaft.
<asp:DropDownList id="ddl" runat="server"
DataValueField="Key"
DataTextField="Value.DisplayName" />
Code Hinter
var d = new Dictionary<int, MailAddress>();
d.Add(0,new MailAddress("[email protected]", "Mr. Foo");
d.Add(1,new MailAddress("[email protected]", "Mr. Bar");
ddl.DataSource = d;
ddl.DataBind(); //Error. It doesn't like "DisplayName"
InformationsquelleAutor Armstrongest | 2010-09-29
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dass es nur die reflektion verwendet, um die Eigenschaft von dem Objekt, das Sie als Datenquelle. Sie konnte Verwendung von linq to wickeln Sie Ihre Sachen in KetValuePair Objekte
Value
und Ihr code:...Select(r => new KeyValuePair<string, string>(r.Key.ToString(), r.Value.DisplayName));
Sie brauchen auch nicht dieToList();
Check out this post:
http://blogs.msdn.com/b/piyush/archive/2006/10/17/how-to-bind-generic-dictionary-with-dropdown-list.aspx
Ändern:
und:
Und Sie sollte das tun, was Sie erwarten.
System.Net.MailAddress
nicht über eine wichtige Eigenschaft. Der link ist allerdings hilfreich.Wenn Sie die .NETTO-Mailadresse der Klasse, können Sie erstellen Ihre eigene Klasse durch Vererbung von der Mailadresse, die Neuerstellung der Konstruktoren, die Sie benötigen und überschreiben der ToString () - Methode zurückgegeben, "DisplayName" statt "displayName". Die nur mit DataTextField="Wert" sollte funktionieren. Wie diese:
Wenn Sie den code, um die Klasse MailAddress, Sie können den Standardwert überschreiben ToString () - Implementierung in der Klasse und haben es wieder die DisplayName-Eigenschaft, die können Sie einfach DisplayTextField="Wert" wie so:
System.Net.MailAddress
Klasse. Ich glaube nicht, dass ich außer Kraft setzen kann.