2012-04-10 83 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

相关问题