2011-10-24 7 views
1

dayrenderイベントでコントロールを追加した後、コントロールを後で見つける方法はありますか?私は試しましたasp.netカレンダーコントロール内でコントロールを検索する方法

calendar.FindControl("lblSample") 

しかし成功しません。ここで

は私のコードの一部は、より明確にすることです:イベントとページの負荷を完全にレンダリングする

protected void calSample_DayRender(object sender, DayRenderEventArgs e) 
{ 
    Label lblSample = new Label(); 
    lblSample.ID = "lblSample"; 
    lblSample.Text = "Sample"; 
    e.Cell.Controls.Add(lblSample); 
} 

一日を過ごした後、私は私がしようとすると、バック

をコントロールを取得し、リンクボタンのイベントを持っています
protected void lbtnSave_Click(object sender, EventArgs e) 
{ 
    //Not working 
    Label lblSample = calSample.FindControl(lblSample); 

    //Also can't get to work, this was using Ross' suggestion and the recursive find function he wrote about. I'm probably just not using it correctly. 
    Label lblSample = ControlFinder.FindControl<Label>(calSample, "lblSample"); 
} 
+1

を取得 'FindControl'は、再帰的に検索するつもりはありません。 –

+0

複数のレイヤーを再帰的に処理する必要があります。あなたのフォームにあなたのコントロールを持つasp:Panelがある場合は、Form => Panel => Controlをナビゲートする必要があります。 – StuartLC

+1

http://stackoverflow.com/questions/2209854/find-all-child-controls-of-specific-type-using-enumerable-oftypet-or-linq – abatishchev

答えて

0

この答えはので、私は私が後だっ値を見つけるためPage.Request.Paramsを使用することができることを私に示した上記のRossのコメントです。最もクリーンなソリューションではありませんが、機能します!

あなたがイベント

protected void calSample_DayRender(object sender, DayRenderEventArgs e) 
    { 
     DropDownList ddlSample = new DropDownList(); 
     ddlSample.ID = "ddlSample"; 
     ddlSample.DataSource = sampleDS; 
     ddlSample.DataBind(); 
     e.Cell.Controls.Add(ddlSample); 
    } 

をレンダリング日にカレンダーコントロールにドロップダウンリストを追加した場合あなたは戻って、このような選択された値を取得することができ、もちろん私は、ドロップダウンリストが存在することを確認するために多くのチェックを入れる必要がありますあなたは現在の子供が、内の任意のコンテナの子どもたちだけでなく、検索しているあなた自身を作るために必要になるだろうので、しかし、あなたは絵に

protected void lbtnSave_Click(object sender, EventArgs e) 
    { 
     string sampleID = Page.Request.Params.GetValues("ddlSample")[0]; 
    } 
1

問題は、コントロールがdayrenderメソッドまでページに追加されなかったためです。つまり、ポストバックでコントロールへの参照を取得できなかったことを意味します。 Page.Request.Paramsコレクションを使用して、OPはポストバックの価値をつかむことができました。


問題は、findコントロールが再帰的ではなく、必要なコントロールがおそらく別のコントロール内にあることです。

これは役立つだろう再帰的な検索の制御方法を作成する方法を示します:あなたはカレンダーコントロールのコードを投稿した場合http://stevesmithblog.com/blog/recursive-findcontrol/

代わりに私はおそらく、もう少しあなたを助けることができます。

ロス

+0

ロスのおかげで、私はこれをいくつかの私のプロジェクトの私は自分の質問を編集して、カレンダーの問題にこの機能を使用しようとしましたが、成功しませんでした。私が間違っているところを私に見せてもらえますか? – stillsmallvoice

+1

問題は、ボタンが押された時点でラベルがカレンダーに追加されていないことです。あなたが実際にラベルを手に入れようとしたら、あなたはそれを握って何をしようとしていますか? –

+0

実際には、実際のコードにドロップダウンリストを追加して、選択した値を取得しようとしていました。私はあなたが正しいと思う、リンクボタンのイベントは、私のコントロールが一掃されるように、昼間のイベントの前に来る。私はまだこれを解決する方法を知らない... – stillsmallvoice