2012-04-21 14 views
0

私は自分のウェブページにプレースホルダを持っており、私はそれにユーザコントロールを動的にバインドします。親ページからユーザーコントロール内のGridViewを検索するにはどうすればよいですか?

私は自分のプレースホルダー内のすべてのコントロールをループし、コントロールID、つまりユーザーコントロールのIDを取得しようとします。コントロールIDは、基本的には、下線を持つ私のusercontrolの名前です。私のユーザーコントロールの名前がdynamicControl.ascxの場合、私のcontrol.IDにはASP.dynamicControl_ascxがあります。今度はユーザーコントロールを再度ロードする必要がありますか?もしそうなら、私はどのようにそれを行うのですか?それをキャストする方法と私のusercontrolの中でgridviewを見つける方法は?

ユーザーコントロールはグリッドビューなので、コントロール内のテキストボックスに入力された値を取得する必要があります。

答えて

2

いくつかのステップ/ここで必要な概念...あなたの動的コンポーネントをバインドする/

  1. 理解ページのライフサイクルと知っています。通常これは、Page_Init内でバインドを実行して、ポストバックビューステートバインディング上に存在するようにすることで実現できます。このような配慮がなければ、グリッドは存在しないことがあり、存在する場合は常に空になります。あなたのバインディングをPage_Initに移動することはできません。これらの場合、Biding Dynamic Controlsでgoogleを実行する必要があります。ポストバックで動的コンテンツを返すためのさまざまなアプローチに対処する方法には、たくさんの例があります。

  2. Threは、子コントロールのリストを歩く必要はありません。FindControlを見てください。グリッドが作成されたときに 'MyGrid'のIDが割り当てられ、Userコントロールの名前がMyUserControlであると仮定すると、ポストバック時にグリッドを見つけるには(上記の番号1のビューステートの問題が処理されていると仮定して) - grid = MyUserControl.FindControl("MyGrid")

もちろん、グリッドオブジェクトが返されない場合、MyGridは存在しません。これはあなた http://www.asp.net/web-forms/tutorials/master-pages/control-id-naming-in-content-pages-cs

私は動的に追加された制御値を見つけることができた。この道を助ける

+0

マスターページIDです...私は見つけることができないのです...はい私はInitに私のプレースホルダー関数をロードし、私はポストバックに私のグリッドを参照してください.... – user1348130

+0

は0rowsを返します DataTable questionResp = new DataTable(); 文字列questionLabel = String.Empty; foreachの(phReqForm.Controlsにおける制御CTRL) {foreachの(ctrl.Controlsにおける制御ctrlChild) {(ctrlChildであるASP.dynamiccontrolfr_ascx)場合 {ユーザーコントロールUC =新しいユーザーコントロール()。 uc =(UserControl)Page.LoadControl( "DynamicControlFR.ascx"); GridView gv =((GridView)uc.FindControl( "gvFR")); 文字列テスト= gv.Rows.Count.ToString(); questionResp.Rows。追加(test、test、questionLabel、test); }}} – user1348130

1

このことができます

希望.....。 は、検索したいコントロールIDを入力するだけです。 はここplnallとテキストボックスIDがctl00cplacehldがコンテンツプレースホルダIDです私のパネルID txt_idされた、これは私のコードである

MasterPage ctl00 = FindControl("ctl00") as MasterPage; 

      ContentPlaceHolder cplacehld = ctl00.FindControl("ContentPlaceHolder2") as ContentPlaceHolder; 
Panel panel1 = cplacehld.FindControl("plnall") as Panel; 
TextBox txt = cplacehld.FindControl("txt_id") as TextBox; 
        value = txt.Text; 
+0

こんにちはイワンKarajas、 私は私が電子メールで私のシナリオと私は何をしようとしているあなたを説明することができます...による文字の制限にここに私のコードを貼り付けカントので、あなたの電子メールを持つことができます... – user1348130

+0

私は完全なコードを貼り付けることができませんでしたが、私のgridviewはusercontrol内にあり、アプリケーションには多くのユーザーコントロールがあります。特定の条件によっては、ユーザーコントロールをWebページのプレースホルダにバインドします。私は私のWebページ上にある保存ボタンを押すと、usercontrolのgridviewからデータを保存したい。だから私は、私のグリッドビューの行のすべての値を取得し、それらを保存する必要があります...しかし、私はグリッドを見つけることができません。私はASP.dynamicControl_ascxのようなものを見つけることができます。これはアンダースコアと接頭辞aspのない私のusercontrolの名前です...これは非常にイライラしています...助けてください – user1348130

関連する問題