2012-04-10 7 views
0

私が使用しているカスタムコントロールライブラリがあり、から継承するコントロールの場合はDataTextFieldとほぼ同じように動作するDataCodeFieldというプロパティを追加しました。プロパティをカスタムコントロールにバインドする

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

+0

私はエキスパートではありませんが、データをDDLにバインドするときに、ペア(名前、値)である必要はありません。そうでないとエラーが発生します。あなたのコードは、私が上で指摘したもの以外は問題ありません。 –

+0

正しいタイプです。これは、バインドされたデータソースからオブジェクトを取得することと関係しています。 – joncodo

答えて

1

データソースをviewstateに保存すると、選択した年齢にアクセスできます。

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

これは確かに可能ですが、私は膨らませたくありません大きなオブジェクトを持つビューステート。 – joncodo

+0

年齢をViewStateの独自のリストに入れるだけです: 'var age = Ages [ddlTest.SelectedIndex];' – Magnus

関連する問題