2012-04-10 130 views
0

我有一個我正在使用的自定義控件庫,並且我添加了一個名爲DataCodeField的屬性,該屬性的作用與從,繼承的控件的DataTextField幾乎相同。將屬性綁定到自定義控件

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事件來做到這一點,但我似乎無法找到從哪裏開始。任何幫助,將不勝感激。我的最終目標是在組合框被數據綁定後訪問像這樣的年齡。

另外,有沒有辦法訪問綁定的數據源,然後根據selectedIndex從該對象訪問年齡?

+0

不確定這是否有幫助,但在您嘗試從'ddlTest'控件中檢索值時,控件的類型是什麼?如果它不是你最初定義的類型,也許你想把它轉換成你的類型。 – MilkyWayJoe 2012-04-10 19:34:08

+0

我不是專家,但是當你將數據綁定到DDL時,它不一定是成對(名稱,值),否則它會給你錯誤。你的代碼似乎很好,除了我上面提到的。 – 2012-04-10 19:36:18

+0

它是正確的類型。這與從綁定的數據源中檢索對象有關。 – joncodo 2012-04-10 19:37:10

回答

1

如果將數據源保存在視圖狀態中,則可以使用;

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

這是可以肯定的,但我不想膨脹與大對象的視圖狀態。 – joncodo 2012-04-10 19:48:50

+0

只需將Age放在ViewState自己的列表中比:var age = Ages [ddlTest.SelectedIndex];' – Magnus 2012-04-10 19:51:26

相關問題