2012-04-10 11 views
0

Ich habe eine benutzerdefinierte Steuerelementbibliothek, die ich verwende, und ich habe eine Eigenschaft mit dem Namen DataCodeField hinzugefügt, die fast identisch ist mit DataTextField für ein Steuerelement, das von ComboBox erbt.Binden Sie eine Eigenschaft an ein benutzerdefiniertes Steuerelement

DummyData data1 = new DummyData(12, "Jon", 1); 
    DummyData data2 = new DummyData(15, "Bill", 2); 
    DummyData data3 = new DummyData(23, "Ted", 1); 

    var people = new List<DummyData>{data1, data2, data3}; 

    ddlTest.DataSource = people; 
    ddlTest.DataTextField = "Name"; 
    ddlTest.DataCodeField = "Age"; 
    ddlTest.DataValueField = "Id"; 
    ddlTest.DataBind(); 

    var id = ddlTest.SelectedValue; 
    var index = ddlTest.SelectedIndex; 
    var name = ddlTest.SelectedItem; 
    var age = ?? 

Ich brauche die Personen Alter zu finden, wenn ich an die neuen DataCodeField gebunden. Ich weiß, dass ich das Ereignis OnDataBinding überschreiben muss, aber ich kann nicht finden, wo ich anfangen soll. Jede Hilfe wäre willkommen. Mein Endziel ist es, auf das Alter wie dieses zuzugreifen, nachdem die Combobox datengebunden wurde.

Gibt es alternativ eine Möglichkeit, auf die gebundene Datenquelle zuzugreifen und dann auf das Alter von diesem Objekt basierend auf dem ausgewähltenIndex zuzugreifen?

+0

Nicht wirklich sicher, ob das hilft, aber was ist der Typ des Steuerelements zu dem Zeitpunkt, zu dem Sie versuchen, die Werte von 'ddlTest' zu erhalten? Wenn es nicht der Typ ist, den Sie ursprünglich definiert haben, möchten Sie ihn vielleicht in Ihren Typ umwandeln. – MilkyWayJoe

+0

Ich bin kein Experte, aber wenn Sie Daten an DDL binden, muss es nicht in Paar (Name, Wert) sein, sonst wird es Ihnen einen Fehler geben. Ihr Code scheint gut zu sein, außer dem, was ich oben gezeigt habe. –

+0

Es ist vom richtigen Typ. Dies hat mit dem Abrufen des Objekts aus der gebundenen Datenquelle zu tun. – joncodo

Antwort

1

Wenn Sie die Datenquelle im Ansichtszustand speichern, können Sie mit dem ausgewählten Alter auf das ausgewählte Alter zugreifen;

var age = People[ddlTest.SelectedIndex].Age; 
+0

Dies ist zwar möglich, aber ich möchte nicht aufblähen Viewstate mit großen Objekten. – joncodo

+0

Setzen Sie das Alter in ViewState in eine eigene Liste als: 'var age = Ages [ddlTest.SelectedIndex];' – Magnus

Verwandte Themen