2012-04-10 6 views
0

У меня есть пользовательская библиотека управления, которую я использую, и я добавил свойство, называемое DataCodeField, которое действует почти так же, как DataTextField для элемента управления, который наследует от ComboBox.Привязать свойство к настраиваемому элементу управления

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 = ?? 

Мне нужно найти совершеннолетнее лицо, когда я обвил его к новому DataCodeField. Я знаю, что мне нужно переопределить событие OnDataBinding, чтобы сделать это, но я не могу найти, с чего начать. Любая помощь будет оценена по достоинству. Моя конечная цель - получить доступ к возрасту, подобному этому после того, как combobox был привязан к базе данных.

В качестве альтернативы, есть ли способ получить доступ к связанному источнику данных, а затем получить доступ к возрасту от этого объекта на основе selectedIndex?

+0

Не уверен, что это помогает, но каков тип элемента управления в то время, когда вы пытаетесь получить значения из 'ddlTest'? Если это не тот тип, который вы изначально определили, возможно, вы хотите применить его в своем типе. – MilkyWayJoe

+0

Я не эксперт, но когда вы привязываете данные к DDL, он не должен быть в паре (имя, значение), иначе это даст вам ошибку. Ваш код кажется прекрасным, за исключением того, что я указал выше. –

+0

Это правильный тип. Это связано с извлечением объекта из связанного источника данных. – joncodo

ответ

1

Если вы сохраните источник данных в viewstate, вы можете получить доступ к выбранному возрасту;

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

Это возможно, но я не хочу надувать viewstate с большими объектами. – joncodo

+0

Просто поставьте Age в свой собственный список в ViewState, чем: 'var age = Ages [ddlTest.SelectedIndex];' – Magnus